Hapus Semua Karakter Ilegal dari Semua Nama File di Folder Yang Diberikan dan subfolder

4

Saya Tahu ini pada dasarnya dijawab dan automator dengan skrip shell (Sanitize Filenames) berfungsi dengan baik, tetapi saya perlu juga melakukan semua subfolder. Dan jika mungkin pangkas nama file menjadi 50 karakter sambil mempertahankan ekstensi file. Saya telah menemukan sederetan kode bash yang memotong file tetapi juga menghapus ekstensi dan itu tidak berfungsi dengan baik ketika mentransfer file-file ini dari Mac ke Windows.

Script yang berdiri adalah ini

for f in "$1"/*; do
dir=$(dirname "$f")
file=$(basename "$f")
mv "$f" "${dir}/${file//[[:cntrl:]\\\/:*?\"<>|]/_}" 
done 

Saya tidak menentang menggunakan applescript di automator untuk menyelesaikan tugas ini.

Tim Moseley
sumber
Catatan: Di unix / linux ada perintah opsional yang disebut "rename", dan dengan pencarian Google cepat saya menemukan ada banyak perintah serupa untuk mac. Saya pikir Anda harus memeriksa perintah ini. Perintah "rename" ini menggunakan ekspresi sed (regex + lainnya) untuk membuat nama akhir.
Giacomo Catenazzi
apakah ada cara untuk membuat ini melakukan subfolder? Saya juga mencoba memotong nama file menjadi 30 karakter sambil mempertahankan ekstensi. Ada ide? Saya punya ini: mv "$ f" "$ {dir} / $ {file: 0: 30} ini berfungsi dengan baik tetapi menghapus ekstensi yang saya perlukan karena file-file tersebut ditransfer ke sistem Windows.
Tim Moseley
1
Saya akan melakukan sesuatu seperti ' {0,30} (\. [^.] )? $' Sebagai regex. Menggunakan rename atau dengan "find | sed | bash", di mana pada sed saya membangun perintah mv
Giacomo Catenazzi

Jawaban:

0

Anda bisa menggunakannya find. Opsi di OSX / Darwin findsedikit berbeda dari yang ada di varian * nix lainnya, jadi beberapa fitur ini mungkin tidak tersedia untuk Anda, tetapi Anda akan mendapatkan intinya dan dapat bermain dengan opsi yang tersedia:

find -regextype posix-extended -regex '.*\/[^\/]*[[:cntrl:]\\:*?"<>|].*' -print \
  -exec mv "{}" "$(echo "{}" | perl -ane 'chomp; s/[[:cntrl:]\\:*?"<>|]//g; print' -)"
Ziggy Crueltyfree Zeitgeister
sumber