Apakah ada cara untuk mengganti nama semua file dalam direktori menjadi huruf kecil |
Saya mencari perintah oneliner .
Saya menyukai TotalCommander's alt+f7
, sekarang saya membutuhkan fungsi itu di Terminal
Apakah ada cara untuk mengganti nama semua file dalam direktori menjadi huruf kecil |
Saya mencari perintah oneliner .
Saya menyukai TotalCommander's alt+f7
, sekarang saya membutuhkan fungsi itu di Terminal
Jawaban:
Untuk setiap file a_file
dalam direktori saat ini ganti nama a_file
menjadi huruf kecil.
for a_file in *;do mv -v "$a_file" `echo "$a_file" | tr [:upper:] [:lower:]` ;done;
Untuk huruf besar, balik argumen menjadi [:lower:] [:upper:]
tr
tautan referensi perintah
Memperbarui
Bahkan kontrol lebih banyak *
bisa diganti ls
.
Misalnya dalam direktori yang berisi 1.txt, 2.txt, 3.txt, 1.jpg, 2.jpg dan 3.jpg untuk memfilter hanya file * .jpg, ls
dapat digunakan:
for a_file in $(ls *.jpg);do mv -v $a_file `echo $a_file | tr [:upper:] [:lower:]` ;done;
Kode di atas akan menetapkan a_file
variabel semua file dengan ekstensi .jpg.
Memperbarui menambahkan -v
opsi untuk mv
perintah sebagai per sds disarankan.
Ada utilitas yang lebih elegan dan umum disebut prename
.
Ditulis oleh Larry Wall, ia hadir perl
sehingga kemungkinan besar sudah tersedia di sistem Anda/usr/bin/prename
(jika Anda memiliki alternatif pengaturan mungkin juga tersedia sebagai /usr/bin/rename
terhubung melalui / etc / alternative to prename
)
Dengan menggunakannya Anda dapat mengganti nama banyak file dalam satu perintah dengan memberikan ekspresi perl (termasuk tetapi tidak terbatas pada substitusi) s///
atau transliterasi karakter tr///
):
Contoh:
# Lowercase all *.JPG filenames:
prename tr/A-Z/a-z/ *.JPG
# Change any 'No' in a filename to a 'Yes':
prename s/No/Yes/g *No*
# increment first sequence of digits in a filename by 3:
prename 's/([0-9]+)/$1+3/e' *[0-9]*
# If a file contains 'aaa', append '.bak' to its name
prename 'if (/aaa/) {$_ .= ".bak"}' *
Dan seterusnya.
Satu hal baik tentang prename adalah ia melindungi Anda, dalam hal mengganti nama file menjadi nama file yang ada.
man prename
untuk lebih jelasnya.
find
find . -name * -type f -exec rename 'y/A-Z/a-z/' '{}' \;
find
-name
meletakkan polanya.-maxdepth 0
: Hanya direktori saat ini.rename
-n, -nono
: Tidak ada tindakan: cetak nama file yang akan diganti nama, tetapi jangan ganti nama.y/source/dest/
: Menerjemahkan karakter dalam ruang pola yang muncul di sumber ke karakter yang sesuai di dest.
mv
sehingga Anda melihat apa yang sedang dilakukan; Anda mungkin tidak ingin meneruskan "-f" karena ini dapat merusak file yang ada