bash shell memiliki sintaks untuk menerjemahkan nama variabel menjadi huruf besar semua.
for file in * ; do # or *.jpg, or x*.jpg, or whatever
mv "$file" "${file^^}"
done
Fitur ini diperkenalkan di bash versi 4.0, jadi pertama verifikasi bahwa versi bash Anda mengimplementasikannya. Untuk menghindari kesalahan, coba sekali mengganti mv oleh echo mv , hanya untuk memastikan itu akan melakukan apa yang Anda inginkan.
Dokumentasi untuk fitur ini ada di sini, atau ketik info bash dan telusuri "atas".
Anda mungkin harus memutuskan apa yang harus dilakukan jika file target sudah ada (katakanlah, jika keduanya x00000.jpg dan X00000.JPG sudah ada), kecuali Anda yakin itu bukan masalah. Untuk mendeteksi tabrakan nama tersebut, Anda dapat mencoba:
ls *.txt | tr '[a-z]' '[A-Z]' | sort | uniq -c | sort -n
dan cari baris yang tidak dimulai dengan 1 .
rename
Mungkin cara termudah untuk mengganti nama banyak file adalah menggunakan rename Perl . Untuk menerjemahkan nama huruf kecil ke atas, Anda akan:
rename 'y/a-z/A-Z/' *
Jika file juga ada di subdirektori, Anda dapat menggunakan globstar atau find :
find . -maxdepth 1 -type f -iname "*.jpg" -execdir rename "y/a-z/A-Z/" {} +
Referensi
- Cara:Linux Mengganti Nama Beberapa File Pada Prompt Shell – nixCraft
- Info selengkapnya tentang
y/, terjemahkan bukan s pengganti. - DistroTube - Alat Untuk Mengganti Nama File Di Linux
for f in * ; do mv -- "$f" "$(tr [:lower:] [:upper:] <<< "$f")" ; done
Anda tidak dapat mengganti nama file dari Bash saja, karena Bash tidak memiliki perintah bawaan untuk mengganti nama file. Anda harus menggunakan setidaknya satu perintah eksternal untuk itu.
Jika Perl diizinkan:
perl -e 'for(@ARGV){rename$_,uc}' *.jpg
Jika Python diizinkan:
python -c 'import os, sys; [os.rename(a, a.upper()) for a in sys.argv[1:]]' *.jpg
Jika Anda memiliki ribuan file atau lebih, solusi di atas cepat, dan solusi di bawah terasa lebih lambat.
Jika AWK, ls dan mv diperbolehkan:
# Insecure if the filenames contain an apostrophe or newline!
eval "$(ls -- *.jpg | awk '{print"mv -- \x27"$0"\x27 \x27"toupper($0)"\x27"}')"
Jika Anda memiliki banyak file, solusi di atas tidak berfungsi, karena *.jpg meluas ke daftar argumen yang terlalu panjang (kesalahan:Daftar argumen terlalu panjang ).
Jika tr dan mv diizinkan, lalu lihat jawaban damienfrancois.
Jika mv diperbolehkan:
for file in *; do mv -- "$file" "${file^^}"; done
Harap perhatikan bahwa ini mengganti nama .jpg ke .JPG di bagian akhir, tetapi Anda dapat memodifikasinya untuk menghindarinya.