Batch mengubah nama file menjadi huruf kecil


17

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:


20

Untuk setiap file a_filedalam direktori saat ini ganti nama a_filemenjadi 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:]

trtautan 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, lsdapat 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_filevariabel semua file dengan ekstensi .jpg.

Memperbarui menambahkan -vopsi untuk mvperintah sebagai per sds disarankan.


4
Anda mungkin ingin meneruskan "-v" mvsehingga Anda melihat apa yang sedang dilakukan; Anda mungkin tidak ingin meneruskan "-f" karena ini dapat merusak file yang ada
sds

Ini tidak berfungsi untuk file dengan spasi di namanya.
Tianxiang Xiong

Anda dapat menggunakan tanda kutip di sekitar nama file.
Stef K

2
Maaf, tetapi bagian tentang ls * jpg adalah ide yang buruk . mywiki.wooledge.org/ParsingLs Anda dapat mencapai hasil yang sama dengan * jpg di mana Anda memiliki * di tempat pertama.
tink

16

Ada utilitas yang lebih elegan dan umum disebut prename.

Ditulis oleh Larry Wall, ia hadir perlsehingga kemungkinan besar sudah tersedia di sistem Anda/usr/bin/prename (jika Anda memiliki alternatif pengaturan mungkin juga tersedia sebagai /usr/bin/renameterhubung 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.


1

Menggunakan find

find . -name * -type f -exec rename 'y/A-Z/a-z/' '{}' \;

Untuk find

  • Tentu saja setelah -namemeletakkan polanya.
  • -maxdepth 0: Hanya direktori saat ini.

Untuk 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.
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.