Saya mencoba mengubah nama banyak trek musik dalam direktori, tetapi saya mendapatkan kesalahan ini:
Saat memindahkan banyak file, argumen terakhir harus berupa direktori
Ini skripnya:
for file in * ; do
mv $file $(echo $file |sed 's/^.\{5\}//g')
done
Ini berfungsi untuk file tanpa spasi, bagaimana saya akan memodifikasi skrip ini?
-
. Alih-alihecho "$file"
digunakanprintf '%s\n' "$file"
.mv
. :) Anda menangani kasus itu :) --- Yang saya maksud adalah masalah denganecho
dirinya sendiri. Misalnya GNU echo (baik standalone dan bash built-in) tidak akan mencetak string ini:-n
,-e
dan-E
. Bahkan menurut definisi POSIX tidak dimungkinkan untuk digunakan secaraecho
andal karena situasi tertentu tidak ditentukan. Sesuai XSIecho
akan menafsirkan urutan melarikan diri backslash. ---printf '%s\n'
tidak memiliki efek tergantung yang tidak diinginkan dan implementasi seperti itu.Anda dapat menggunakan nama samaran, yang sering didistribusikan bersama dengan Perl. (Misalnya, di Debian, / usr / bin / nama file dipasang oleh
perl
paket.) Jika tidak dikemas oleh distribusi Anda (cariprename
danrename
di lokasi binari konvensional), tersedia untuk diunduh dari sejumlah tempat, seperti misalnya di sini , di sini atau di sini .Script ini mengambil ekspresi reguler untuk diterapkan ke masing-masing nama file, dan satu set nama file, dan memodifikasi nama-nama file tersebut sesuai dengan ekspresi reguler itu.
Misalnya, Anda mungkin melakukannya
untuk menunjukkan apa yang akan terjadi jika Anda menghapus lima karakter pertama dalam nama file. Untuk benar - benar menjalankan rename, Anda cukup menghapus
-n
.sumber