Ayrıştırmak ls
veya borulamak güvenli değildir find
[ 1 , 2 ]
Ayrıştırmak için güvenli (ve boruya) çıktısı değil ls
ya find
mümkün bulmak başlıca nedeni, dosya adları olmayan olağan karakterlerin yeni satır , sekme ... İşte saf kabuk döngüsü çalışacak [ cuonglm ] .
Hatta find
komut borulu değil seçeneğiyle -exec
çalışacaktır:
find ./*.png -exec basename {} .png \;
Güncellemeler / Notlar : find .
Gizli dosyaları bile aramak veya find ./*.png
yalnızca gizli olmayanları bulmak için kullanabilirsiniz. Bulunacak seçenek bir seçenek olarak alacağı için find *.png -exec ...
adında bir dosya bulunması durumunda sorun yaşayabilirsiniz .png
. Olarak -maxdepth 0
adlandırılan dizinlerde Dir_01.png
veya find ./*.png -prune -exec ...
maxdepth'e izin verilmediğinde aşağı inmeyi önlemek için ekleyebilirsiniz (teşekkürler Stéphane). Bu dizinleri listelemekten kaçınmak istiyorsanız, seçeneği eklemelisiniz -type f
(normal olmayan dosyaların diğer türlerini de hariç tutacaktır). man
Kullanılabilir tüm seçenekler hakkında daha eksiksiz bir panorama için bir göz atın ve daha iyi bir taşınabilirlik için POSIX uyumlu olduklarını kontrol etmeyi unutmayın.
Bazı kelimeler daha
Örneğin, başlığın bir belgeden kopyalanması ve dosya adına yapıştırılması, bir veya daha fazla yeni satırın dosya adının kendisinde bitmesi olabilir. Yeni bir satırdan hemen önce kullanmak zorunda olduğumuz anahtarı bile bir başlığın içerebileceği kadar şanssız bile olabiliriz:
The new art of working on .png
files and other formats.
Test etmek istiyorsanız, komutlarla bunun gibi dosya adları oluşturabilirsiniz.
touch "A file with two lines"$'\n'"and This is the second.png"
touch "The new art of working on .png"$'\n'"files and other formats.png"
Yazdırılamayan karakterler yerine basit /bin/ls *png
çıktılar?
A file with two lines?and This is the second.png
The new art of working on .png?files and other formats.png
Hangi olacak tüm durumlarda çıkış borusu arasında ls
veya find
aşağıdaki komutu mevcut satır Yeni geliyorsa anlamak hiçbir ipucu olacaktır dosya adı ya da bir takip ederse yeni satır emsal karakteri dosya adı . Bir kötü gerçekten adı, ama yine de yasal bir.
Bir kabuk parametresi-Genişleme olan bir kabuk döngüsü, ${parameter%word}
, varyant hem de printf
veya echo
çalışır [ cuonglm ], [ Anthon1 ] .
for f in *.png; do printf "%s\n" "${f%.png}" ; done
Shell Parametre Expansion [ 3 ] man sayfasından
$ {parametre% word}
$ {parametre %% word}
... genişlemenin sonucu, silinen en kısa eşleştirme modeline ('%' vaka) veya en uzun eşleme modeline ('%%' durum) ilişkin parametre değeridir.
.
. Kongre.png
sonunda dosyalarınızı isimlendirmesini söylese de,foo.zip
yamy.picture.20160518
da sadece ya da png dosyalarına sahip olamamam için hiçbir neden yokmypic
.