itibaren man xargs
xargs, boşluklar (çift veya tek tırnak veya ters eğik çizgi ile korunabilir) veya yeni satırlarla sınırlandırılmış standart girdideki öğeleri okur ve komutu (varsayılan olarak / bin / echo'dur) takip eden ilk bağımsız değişkenlerle bir veya daha fazla kez yürütür standart girdiden okunan öğelere göre. Standart girişteki boş satırlar yoksayılır.
Xargs sınırlayıcısını yeni bir satıra değiştirerek ilk komutunuzu düzeltebiliriz:
ls | egrep '. ' | xargs -d '\n' rm
(bunu yapma ... okumaya devam edin)
Ancak dosya adı bir satırsonu içeriyorsa ne olur?
touch "filename with blanks
and newline"
Çünkü Unix dosya adları boşlukları ve yeni satır içerebilir , bu varsayılan davranışı genellikle problemlidir; boşluklar ve / veya satırsonu içeren dosya adları xargs tarafından yanlış işlenir. Bu durumlarda , bu tür sorunları önleyen -0 seçeneğini kullanmak daha iyidir .
ls
gerçekten bir insan tarafından doğrudan tüketim için bir araçtır , bunun yerine find
dosya adlarını boş bir karakterle ( -print0
) ayırabilen komutu kullanmamız gerekir . Ayrıca grep'e input ( -z
) ve output ( -Z
) öğelerini ayırmak için null karakter kullanmasını söylememiz gerekir . Son olarak, xargs'a boş karakterler ( -0
) kullanmasını söyleriz
find . -type f -print0 | egrep '. ' -z -Z | xargs -0 rm
echo
Yazım hatalarından korunmak için bunu kesinlikle ilk önce çalıştırmak isteyeceksiniz .echo
Önde ekleyin ve kaldıracağı tüm dosyaları yazdırın.