Pipet bulma -ayarları, komutlara aktarılmamış boşlukları olan dosya isimlerine neden olur

20

Normalde, dosya adlarında boşluk bulunan dosyaları kaldırmak için şunları yapmanız gerekir:

$ rm "file name"

Ancak birden çok dosyayı kaldırmak istiyorsam, örneğin:

$ find . -name "*.txt" | xargs rm

Bu, dosyaları boşluk içeren boşluklarla silmez.

    
sordu Ashley 26.08.2015 14:13

3 cevap

39

find ve xargs öğesinin null sonlandırıcıları kullanmasını söyleyebilirsin

find . -name "*.txt" -print0 | xargs -0 rm

veya (daha basit) -delete

yerleşik find eylemini kullanın
find . -name "*.txt" -delete

veya (teşekkürler Kos)

find . -name "*.txt" -exec rm {} +

bunların her ikisi de ARG_MAX gereği olmaksızın sistemin xargs sınırına uymalıdır.

    
verilen cevap steeldriver 26.08.2015 14:19
1

Tesadüfen, bulmaktan başka bir şey kullandıysanız, yeni satırları boş baytlarla değiştirmek için tr kullanabilirsiniz.

Örnek. Aşağıdaki bir liner, bir dizindeki son 10 değiştirilmiş dosyayı, adlarında boşluk olsa bile siler.

ls -tp | grep -v / | head -n 10 | tr "\n" "%code%" | xargs -0 rm

    
verilen cevap Ibrahim 04.05.2017 00:00
0

xargs komutu, sekmeler, boşluklar ve varsayılan olarak sınırlayıcı olarak yeni satırlar kullanır. -D seçeneğini kullanarak yalnızca yeni satır karakterlerini ('\ n') kullanmasını söyleyebilirsiniz:

find . -name "*.txt" | xargs -d '\n' rm

SO üzerinde kaynak yanıtı .

    
verilen cevap joseph_morris 13.04.2018 22:48

Etiketlerdeki diğer soruları oku