Benim için bir devamı olarak önceki soruya , ben formun birden fazla dosya varsa
sw.ras.001
sw.ras.002
sw.ras.003
…
ras.Tüm dosyaların ortasında kaldırmak için hangi komutu kullanabilirim ?
\.kalıplara dahil edip etmediğiniz .
Benim için bir devamı olarak önceki soruya , ben formun birden fazla dosya varsa
sw.ras.001
sw.ras.002
sw.ras.003
…
ras.Tüm dosyaların ortasında kaldırmak için hangi komutu kullanabilirim ?
\.kalıplara dahil edip etmediğiniz .
Yanıtlar:
Bunu, son sorudan herhangi birindeki cevabın oldukça küçük bir modifikasyonuyla yapabilirsiniz:
rename s/ras\.// sw.ras.*
veya
for file in sw.ras.*; do
mv "$file" "${file/ras./}"
done
Açıklama:
renamedüzenli bir ifade ve dosya listesi alan bir perlkomut perldosyasıdır, sırayla her dosyanın adına regex uygular ve her dosyayı, regex uygulamasının sonucu olarak yeniden adlandırır. Bizim durumumuzda, raskelimenin tam anlamıyla \.eşleşir ve bir değişmezle eşleşir .( .tek başına yeni satır dışında herhangi bir karakteri belirtir) ve bunu hiçbir şey olmadan değiştirir.
forDöngü tüm ile başlayan dosyaları alır sw.ras.üzerlerinden (standart kabuk glob) ve döngüler. ${var/search/replace}aramalar $variçin searchve yerine geçer ilk geçtiği replace, böylece ${file/ras./}döner $fileilk önce ras.çıkarılır. Böylece komut, dosyayı aynı eksi adıyla yeniden adlandırır ras.. Bu arama ve değiştirme ile .tam anlamıyla özel bir karakter olarak alınmadığına dikkat edin.
Başka bir seçenek mmv kullanmaktır (Mass MoVe ve yeniden adlandır):
mmv '*ras.*' '#1#2'
Desenlerinizin etrafındaki tek tırnak işaretlerini kullanmayı unutmayın, aksi takdirde yıldızlar kabuk düzeyinde genişler.
Yardımcı program her zaman kullanılamaz, ancak yoksa, ile yükleyebilirsiniz:
sudo apt-get install mmv
Buradaki man sayfasına bakın .
Herhangi bir POSIX uyumlu kabuk (in bash, dash, ksh, vs.):
for file in sw.ras.[[:digit:]][[:digit:]][[:digit:]]; do
mv "${file}" "${file/ras\./}"
done
Veya rename:
rename 's/ras\.//' sw.ras.[[:digit:]][[:digit:]][[:digit:]]
Geçenlerde, bir karakterin dosya isimlerinde birçok defa meydana geldiği bir karakterin son oluşumunu değiştirmek zorunda kaldığım birtakım dosyaların bir kısmını yeniden adlandırmam gerekti. Bu özel durumda ben geçen çizgi yerine vardı -bir alt çizgi ile _bu dönüm,:
some-long-file-name.ext
bunun içine:
some-long-file_name.ext
Biraz zaman aldı ama bu sonunda yaptı:
for FILE in *; do mv $FILE ${FILE%-*}_${FILE##*-}; done
İşte:
${i%-*} dosya adının başlangıcını, en son tire satırına kadar eşleştirir. -${file##*-} Son işlemden sonra dosya adının kalanıyla eşleşir. -
ras, yani ile bitirmeksw..001veyaras., ayrılmasw.001?