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.