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.