Toplu Klasördeki Dosyaları Yeniden Adlandır


10

Bir klasördeki dosya adlarından bazı metinleri nasıl çıkarabilirim?

Şu anda deniyorum:

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

Ama hiçbir şey yeniden adlandırılmıyor

Bir üst klasör, bir grup alt klasör, içinde dosyaları vardır, OneDrive bir "(NEWER_timestamp)" eklemek için harika bir fikir olacağını düşündüm ve bunu kaldırmak istiyorum.

Örnek Dosya Adları:

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

2
Örnek bir dosya adı gönderebilir misiniz?
— muru

Elbette. bazı ile güncellenmiş soru
— Kevin

Yanıtlar:


8

Takip etmeyi dene:

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
  • Tümü [^/]*(.*) .*$, yolun yalnızca a içermeyen son kısmıyla eşleşir /. Ve
  • Yukarıdaki normal ifade, (.*)sondan sonra /ve bir boşluk önce her şeyi eşleşen bir gruptur . Geri referansı olacak $1.
  • .*$$boşluktan sonra her şeyi dosya adının sonuna eşleştirir .
  • Son olarak, yeniden adlandırma işleminin yedek bölümünde, s/.../REPLACEMENT/sonuncusu ile eşleşme grubu olarak bilinen \boşluk arasındaki eşleşen grubu (.*)tuttuk.

2

Normal ifadenin dışındaki tırnak işaretlerini (içinde tam anlamıyla tırnak işareti olarak alınır) kullanmayı ve kaçmayı düşünmelisiniz (. Deneyin;

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

İfadenin kesinliği gerekli olmayabilir, ancak dosyaları değiştirirken çok dikkatli olamazsınız.


tüm bu yapıyor ile asılı reading filenames from STDINBen zaten tüm bu dosyaların olduğu Ana klasör içinde
— Kevin

@Kevin "Komut satırında dosya adı verilmezse, dosya adları standart girdi ile okunur." Kabuk *NEWER*, genişleme bulunmadığı gibi ayrıldığından , bir hata yapmış olmanız veya eşsiz bir joker karakteri hiçbir şeyle değiştirmeyen bir kabuk kullanmanız gerekir.
— muru

kopyalandı ve yapıştırıldı, Ubuntu 14.10 kabuğuna
— Kevin
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.