Apa cara yang baik untuk menambahkan ekstensi file ".jpg" ke file tanpa ekstensi dengan bash?
Apa cara yang baik untuk menambahkan ekstensi file ".jpg" ke file tanpa ekstensi dengan bash?
Jawaban:
for f in *.jpg; do mv "$f" "${f%.jpg}"; done
for f in *; do mv "$f" "$f.jpg"; done
"${f%.jpg}"adalah manipulasi string bash shell. `$ {string% substring}` Menghapus kecocokan terpendek dari $ substring dari belakang $ string.
.jpgbahkan file normal.
Anda dapat menggunakan ganti nama:
rename 's/(.*)/$1.jpg/' *
rename from to file...
Cara lain - tanpa loop
find . -type f -not -name "*.*" -print0 |\
xargs -0 file |\
grep 'JPEG image data' |\
sed 's/:.*//' |\
xargs -I % echo mv % %.jpg
Kerusakan:
perintah di atas adalah untuk dry run , setelah itu Anda harus menghapus "echo" sebelum mv
EDIT Beberapa orang menyarankan bahwa di sini diperlukan "Bungkus argumen jalur dalam tanda kutip; hindari pemisahan argumen pada jalur dengan spasi" .
Biasanya, rekomendasi ini benar, dalam hal ini tidak. Karena, di sini %diganti bukan oleh ekspansi shell tetapi oleh xargsinternal (langsung), sehingga %akan diganti dengan benar bahkan dengan spasi di nama file.
Demo sederhana:
$ mkdir xargstest
$ cd xargstest
# create two files with spaces in names
$ touch 'a b' 'c d'
$ find . -type f -print
./c d
./a b
# notice, here are spaces in the above paths
#the actual xargs mv WITHOUT quotes
$ find . -type f -print | xargs -I % mv % %.ext
$ find . -type f -print
./a b.ext
./c d.ext
# the result is correct even in case with spaces in the filenames...
Sederhana, cd ke direktori tempat file Anda berada dan:
for f in *;do mv $f $f.jpg;done
for f in *;do mv "$f" "$f".jpg;doneuntuk mendukung spasi pada nama file.
Dalam kasus saya, saya tidak mengetahui jenis file jadi saya menggunakan perintah mv dengan bantuan perintah file untuk memeriksa dan mungkin menemukan jenis file. Solusi ini mungkin tidak sempurna untuk semua file karena perintah file mungkin tidak mengenali jenis file tetapi sebagian besar berfungsi dengan baik untuk saya.
for f in *; do ext=$(file $f | awk '{print $2;}'); mv -n "$f" "$f.$ext"; done
Penggunaan awk adalah untuk menghapus kata kedua dari string yang dikembalikan dari file perintah yang sebenarnya merupakan ekstensi.
rename --dry-run * -a ".jpg" # test
* -a ".jpg" # rename
--dry-rundan -atidak tersedia dalam versi saya rename. Jika ini khusus untuk beberapa arsitektur, ini harus ditentukan.
Anda dapat menggunakan memindahkan banyak file . Saya adalah pengelola proyek ini. Sintaksnya sederhana.
mmf files*
Ini akan membuka $ EDITOR Anda dengan semua nama file, atau vim secara default dan Anda cukup menyorot akhir dari semua nama file menggunakan Ctrl + v + G di vim, menyimpan file, keluar dan itu, semua file Anda diganti namanya
Ryan Li
Sintaks yang benar untuk menambahkan ekstensi file ke beberapa file dalam direktori yang tidak memiliki ekstensi file adalah
find . | while read FILE; do if [[ -n `file --mime-type "$FILE" | grep 'message/rfc822'` ]]; then mv "$FILE" "$FILE".eml; fi; done;
mv "${file}" "${file}.jpg"?