GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara menghapus karakter tambahan dalam nama file di Bash?

Di shell, seseorang dapat melakukannya dengan mudah:

for x in *]*.avi ; do 
    mv -i "$x" "${x%]*.avi}.avi"
done

Shell dapat menghasilkan daftar nama file hanya dengan glob biasa, dan ${var%pattern} menghapus pola pencocokan (terpendek) dari ujung string dalam variabel var . Karena ekstensi terakhir selalu .avi , saya baru saja menghapusnya dengan polanya dan menambahkannya kembali. Dengan tanda kutip, ini harus bekerja dengan nama file yang mengandung spasi juga, seperti Fancy Name for a Show.s01e01]Asdf.avi


Ini akan mengganti nama file. Anda memerlukan \w* untuk menandakan sejumlah karakter alfanumerik.

rename 's/\]\w*//' *

Referensi:http://www.troubleshooters.com/codecorn/littperl/perlreg.htm#UsingSimpleWildcards


Ini semua tidak praktis - jawaban lainnya jauh lebih cepat dan lebih pendek - tapi...

Anda dapat menggunakan PowerShell! Microsoft membuka sumbernya baru-baru ini dan menjadikannya lintas platform. Untuk pengunduhan dan petunjuk penginstalan untuk OS Anda, lihat bagian "Dapatkan PowerShell".

Setelah Anda menginstalnya, Anda dapat menggunakan skrip singkat ini:

Get-ChildItem -File '*]*.avi' | ForEach-Object {
    Rename-Item $_ -NewName (($_.Name -Split ']')[0] + '.avi')
}

Pada dasarnya, ini melewati setiap objek di direktori saat ini yang merupakan file yang cocok dengan *]*.avi , dapatkan bagian sebelum braket, tacks .avi kembali ke sana, dan tetapkan itu sebagai nama baru.

Untuk menjalankannya langsung dari Bash, gunakan one-liner semi-golf ini:

powershell -command $'gci -File \'*]*.avi\'|%{rename-item $_ -NewName (($_.Name -Split \']\')[0]+\'.avi\')}'

Kutipan lolos dari jawaban Stack Overflow ini.

(Diuji di Bash pada Ubuntu di Windows. Mungkin ada cara yang jauh lebih singkat untuk melakukannya dengan PowerShell, tetapi saya ingin menunjukkan sesuatu yang dapat dipahami oleh orang yang tidak mengetahui ekspresi reguler.)


Linux
  1. Cara menulis loop di Bash

  2. Bagaimana saya tahu nama file skrip dalam skrip Bash?

  3. Cara menghapus folder dengan nama tertentu

  1. Bagaimana Cara Men-debug Skrip Bash?

  2. Hapus semua karakter khusus dan huruf besar-kecil dari string di bash

  3. Bagaimana cara menghapus karakter yang tidak valid dari nama file?

  1. Bagaimana Cara Mengubah Nama File yang Mengandung Karakter?

  2. Bagaimana Cara Mendeteksi Bash>=4.0?

  3. Bagaimana Mengizinkan Hanya Karakter Tertentu Dalam Variabel Bash?