Yanıtlar:
Bunu ile yapabilirsiniz rename
komut satırı yardımcı programı. İstediğinizi yapmak için basit bir düzenli ifadeye ihtiyacınız var:
rename "s/.+_/ds/g"
files
.+
her şeyi (bu bağlamda) son alt çizgiye kadar temsil eder ( _
) karakter (bu, ilk örneğinizde belirtildiği gibi, birden çok alt çizgi ile çalışır). Bu, alt çizgiden önce en az bir karakter olmasını gerektirir; eğer dosya adlarına sahipseniz _20131012.zip
, kullan .*
yerine. Yani bu üç karakterli dize ( .+_
veya .*_
) her şeye eşleşecek ve dahil dosya adındaki son alt çizgi. s/ eski / yeni /
anlamına geliyor s yeni dize yerine ( ds
) eski dize için. g
anlamına geliyor g küresel ve bu durumda gerekli olmayabilir.
g
benden sadece standart bir alışkanlık ve bu durumda gerekli olmadığını kabul ediyorum.
find . -name "*.zip*" -exec rename "s/.+_/ds/g" {} \;
nerede "{} \;" dosyaadı bulmak için değişken döndürür.
^
başlangıca. Ayrıca OP alt çizgiyi korumak istedi.g
sonunda seçenek burada gerçekten gerekli değildir - eğer mümkünse, dosya adındaki birden fazla örnekle eşleşir. Bu yüzden bu komutun daha iyi sonuç vereceğini düşünüyorum:rename "s/^.+_/ds_/" files