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.gsonunda 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