Batch Ubah Nama File di Folder


10

Bagaimana saya bisa menghapus beberapa teks dari nama file dalam folder?

Saat ini saya sedang berusaha:

rename s/"NEWER_(.*?)"//g *

Tapi tidak ada yang diganti namanya

Saya memiliki folder induk, dengan sekelompok sub-folder, di dalamnya adalah file, yang menurut OneDrive akan menjadi ide bagus untuk menambahkan "(NEWER_timestamp)" ke, dan saya ingin menghapusnya.

Contoh Nama File:

getyou.ico (NEWER_1417529079.87)
o7pm.ico (NEWER_1417529184.89)
o7th.ico (NEWER_1417529135.81)

2
Bisakah Anda memposting nama file contoh?
muru

Tentu. pertanyaan diperbarui dengan beberapa
Kevin

Jawaban:


8

Coba yang berikut ini:

find /path/to/parrent-dir -type f -exec rename -n 's:[^/]*(.*) .*$:$1:' {} +

./o7th.ico (NEWER_1417529135.81)                                 renamed as /o7th.ico
./sub-dir (NEWER_1417529135.81)/getyou.ico (NEWER_1417529079.87) renamed as /sub-dir (NEWER_1417529135.81)/getyou.ico
./sub-dir (NEWER_1417529135.81)/o7pm.ico (NEWER_1417529184.89)   renamed as /sub-dir (NEWER_1417529135.81)/o7pm.ico
./getyou.ico (NEWER_1417529079.87)                               renamed as /getyou.ico
./o7pm.ico (NEWER_1417529184.89)                                 renamed as /o7pm.ico
  • Semua [^/]*(.*) .*$cocok hanya dengan bagian terakhir dari jalur yang tidak mengandung a /. Dan
  • Dalam regex di atas, (.*)adalah sekelompok pencocokan semuanya setelah terakhir /dan sebelum spasi . Referensi belakangnya adalah $1.
  • .*$mencocokkan segalanya dengan akhir $nama file setelah spasi
  • Akhirnya di bagian penggantian nama s/.../REPLACEMENT/, kami hanya menyimpan grup yang cocok yaitu antara yang terakhir \dan ruang (.*)yang dikenal sebagai grup pertandingan.

2

Anda harus mempertimbangkan menggunakan tanda kutip di luar regex (di dalam, mereka secara harfiah dianggap sebagai tanda kutip), dan melarikan diri (. Mencoba;

rename -n 's/ \(NEWER_\d{10}.\d{2}\)$//' *NEWER*

Ketepatan ekspresi mungkin tidak diperlukan, tetapi Anda tidak bisa terlalu berhati-hati saat memodifikasi file.


semua ini dilakukan tergantung dengan reading filenames from STDINsaya sudah berada di dalam folder Induk tempat semua file ini
Kevin

@Kevin "Jika tidak ada nama file yang diberikan pada baris perintah, nama file akan dibaca melalui input standar." Dan karena shell pergi *NEWER*seolah-olah jika tidak ada ekspansi yang ditemukan, Anda pasti telah melakukan kesalahan, atau menggunakan shell yang mengganti wildcard yang tak tertandingi dengan apa-apa.
muru

disalin dan ditempelkan, ke shell Ubuntu 14.10
Kevin
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.