yang kedua sangat cocok untuk mengganti nama file tanpa ekstensi! Terima kasih!
anon58192932
2
yang kedua menambahkan ekstensi pada semua file, bukan hanya yang tanpa ekstensi
Jeff
5
seperti catatan "${f%.jpg}"adalah manipulasi string bash shell. `$ {string% substring}` Menghapus kecocokan terpendek dari $ substring dari belakang $ string.
Jichao
Peringatan: Jika Anda memiliki folder dengan ekstensi campuran, ketahuilah bahwa hal di atas menambahkan .jpgbahkan file normal.
versi ganti mana yang Anda gunakan? Punyaku memiliki argumen yang berbeda:rename from to file...
B Johnson
1
rename disertakan dengan perl, yaitu versi 5.10.1.
Kim Stebel
3
Ini berfungsi dengan baik dengan penggantian nama yang disertakan dalam Ubuntu (dan jadi saya menebak semua distro berbasis Debian), jauh lebih sedikit verbose daripada jawaban jm666.
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...
Anda dapat memasukkan ini ke dalam satu lingkaran dan xargs ini berlebihan. Saya lebih suka jawaban Ryan dalam situasi ini.
Lucius
1
@Lucius - btw, pertanyaannya ingin file "tanpa ekstensi" - jadi Ryan seharusnya hanya menemukan yang ...
jm666
@ jmhhhhhhhhhhh bagaimana cara mengubah cuplikan kode Anda untuk mengganti nama semua file tanpa ekstensi dalam folder menjadi ekstensi masing-masing. (Saya mendeteksi ekstensi yang benar dengan perintah file -b $ filename.)
Soumyajit
24
Sederhana, cd ke direktori tempat file Anda berada dan:
Untuk beberapa alasan ini berhasil untuk saya, tetapi solusi Seth dengan tanda kutip tidak. (
Pesta
4
Akan lebih baik jika digunakan for f in *;do mv "$f" "$f".jpg;doneuntuk mendukung spasi pada nama file.
Hritik
Terima kasih atas solusi yang elegan dan sederhana ini - Saya telah mendapatkan jawaban ini beberapa kali, tetapi sepertinya tidak dapat menghafalnya. #dejavu
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.
--dry-rundan -atidak tersedia dalam versi saya rename. Jika ini khusus untuk beberapa arsitektur, ini harus ditentukan.
Fernando César
0
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
mv "${file}" "${file}.jpg"
?Jawaban:
for f in *.jpg; do mv "$f" "${f%.jpg}"; done for f in *; do mv "$f" "$f.jpg"; done
sumber
"${f%.jpg}"
adalah manipulasi string bash shell. `$ {string% substring}` Menghapus kecocokan terpendek dari $ substring dari belakang $ string..jpg
bahkan file normal.Anda dapat menggunakan ganti nama:
rename 's/(.*)/$1.jpg/' *
sumber
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 olehxargs
internal (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...
sumber
Sederhana, cd ke direktori tempat file Anda berada dan:
for f in *;do mv $f $f.jpg;done
sumber
for f in *;do mv "$f" "$f".jpg;done
untuk mendukung spasi pada nama file.lari kering:
penggantian nama sebenarnya:
sumber
find . | while read FILE; do if [ $(file --mime-type -b "$FILE") == "image/jpeg" ]; then mv "$FILE" "$FILE".jpg; fi; done;
sumber
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.
sumber
rename --dry-run * -a ".jpg" # test * -a ".jpg" # rename
sumber
--dry-run
dan-a
tidak tersedia dalam versi sayarename
. Jika ini khusus untuk beberapa arsitektur, ini harus ditentukan.Anda dapat menggunakan memindahkan banyak file . Saya adalah pengelola proyek ini. Sintaksnya sederhana.
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
sumber
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;
sumber