GNU/Linux >> Belajar Linux >  >> Linux

Linux mengganti nama file menjadi huruf besar

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.


Linux
  1. Cara Mengganti Nama Banyak File Sekaligus di Linux

  2. Mengganti nama banyak file di Linux sesuai dengan pola

  3. Menghapus bagian dari nama file untuk banyak file di Linux

  1. Cara Mengganti Nama File di Linux

  2. Temukan banyak file dan ganti namanya di Linux

  3. Mengganti nama file di linux dengan regex

  1. Cara Mengganti Nama Banyak File Bersama di Linux Menggunakan 3 Metode

  2. Konversi banyak file BMP ke JPEG di Linux

  3. Ganti nama file secara rekursif (ubah ekstensi) di Linux