Normalde, dosya adlarında boşluk olan dosyaları kaldırmak için şunu çalıştırmanız gerekir:
$ rm "file name"
ancak birden fazla dosyayı kaldırmak istersem, örneğin:
$ find . -name "*.txt" | xargs rm
Bu, içinde boşluk bulunan dosyaları silmez.
Normalde, dosya adlarında boşluk olan dosyaları kaldırmak için şunu çalıştırmanız gerekir:
$ rm "file name"
ancak birden fazla dosyayı kaldırmak istersem, örneğin:
$ find . -name "*.txt" | xargs rm
Bu, içinde boşluk bulunan dosyaları silmez.
Yanıtlar:
Boş sonlandırıcıları anlatabilir findve xargsikisini birden kullanabilirsiniz.
find . -name "*.txt" -print0 | xargs -0 rm
ya da (daha basit) kullanan dahili -deleteeylemfind
find . -name "*.txt" -delete
veya (teşekkürler kos)
find . -name "*.txt" -exec rm {} +
ikisi ARG_MAXde gerek olmadan sistemin sınırına uymalıdır xargs.
ARG_MAXayrıca find . -name "*.txt" -exec rm {} \;"güvenli bir atış" olacağını da söyleyeceğim
-print0son seçenek (ya da en azından sonra -name "*.txt") olmalı, aksi halde bu artık bunlarla sınırlı kalmayacak*.txt ...
Bu arada, bulmak dışında bir şey kullandıysanız, yeni satırları boş baytlarla değiştirmek için tr kullanabilirsiniz.
Örneğin. Bir sonraki liner, bir dizindeki en son değiştirilen 10 dosyayı, adlarında boşluk olsa bile siler.
ls -tp | grep -v / | head -n 10 | tr "\n" "\0" | xargs -0 rm
Xargs komutu, varsayılan olarak sınırlayıcı olarak sekmeleri, boşlukları ve yeni satırları kullanır. -D seçeneğiyle yalnızca yeni satır karakterlerini ('\ n') kullanmasını söyleyebilirsiniz:
find . -name "*.txt" | xargs -d '\n' rm
-0yerine bahseder . Ubuntu ne kullanıyor? Burada kabul edilen cevap kullanır . Ne doğru? -dxargs-0
find -name "*\ *.txt" | xargs rmiki kelime dosyası için işe yarıyor mu?