Ayrıştırmak lsveya borulamak güvenli değildir find[ 1 , 2 ]
Ayrıştırmak için güvenli (ve boruya) çıktısı değil lsya findmü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 findkomut 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 ./*.pngyalnı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 0adlandırılan dizinlerde Dir_01.pngveya 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). manKullanı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 lsveya findaş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 printfveya 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.pngsonunda dosyalarınızı isimlendirmesini söylese de,foo.zipyamy.picture.20160518da sadece ya da png dosyalarına sahip olamamam için hiçbir neden yokmypic.