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:
rename
düzenli bir ifade ve dosya listesi alan bir perl
komut perl
dosyası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, ras
kelimenin 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.
for
Döngü tüm ile başlayan dosyaları alır sw.ras.
üzerlerinden (standart kabuk glob) ve döngüler. ${var/search/replace}
aramalar $var
için search
ve yerine geçer ilk geçtiği replace
, böylece ${file/ras./}
döner $file
ilk ö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..001
veyaras.
, ayrılmasw.001
?