Saya punya 291 file bernomor (mulai dari 001 - judul dan berakhir pada 291 - judul) yang perlu dipindahkan ke direktori terpisah. (001 hingga 021 ke folder 1, 022 hingga 053 ke folder 2, mereka tidak selalu memiliki jumlah file yang sama setiap kali).
Saya pikir saya bisa melakukannya dengan cara yucky seperti ini: ls | head -n 21 | sed -r 's|(.*)|mv \1 /path/to/folder1|' | sh
Saya hampir yakin ada cara yang lebih baik, jadi apa itu?
EDIT: Jadi itu akan bekerja dengan baik, tapi saya ingat ...
Saya tidak terjebak menggunakan terminal, jadi saya menggunakan file manager untuk mengklik dan menarik. Pertanyaan masih berdiri.
ls -l | grep ^- | wc -l
mendapatkan jumlah garis.Jawaban:
Karena Anda mengatakan itu tidak selalu tepat 21 file daripada yang Anda butuhkan untuk memindahkan file secara manual, dan untuk melakukannya secara efektif Anda bisa menggunakan ekspansi brace :
sumber
file{001..21}name
, Anda tidak harus menggunakan wildcard. Bagaimanapun, senang itu berhasil untuk Anda.Ini akan memindahkan file seperti yang Anda gambarkan (kecuali bahwa rentang kedua adalah 022 hingga 042 untuk 21 file kedua).
sumber
Yang saya maksud adalah memindahkan banyak file (seperti sepuluh ribu atau jutaan), shell akan mengeluh tentang daftar file terlalu lama jika Anda hanya menggunakan {1..20}, jadi
Di zsh , Anda dapat memuat mv builtin:
setelah melakukan itu, Anda dapat menggunakan perintah seperti:
atau jika Anda menulis beberapa skrip shell, Anda dapat melakukan sesuatu seperti ini:
jika Anda tidak menggunakan zsh, Anda dapat merujuk ke /unix/128559/solving-mv-argument-list-too-long
sumber