dosya adlarında boşluk bulunan linux'taki birden fazla dosyayı silin


1

Linux kutumda, silmek zorunda olduğum 10000'den fazla dosya içeren bir dizin var. Koşu ...

sudo rm -rf /var/tmp/*

Hata mesajını verir ...

sudo: unable to execute /bin/rm: Argument list too long

Bunun çözümü kaçmaktır.

sudo find /var/tmp | xargs sudo rm

Bu sadece dosya adında boşluk olmayan dosyalar için çalışır. Ancak, bazı dosyaların içinde boşluk bulunan adlar vardır ve silinmezler. Örneğin, bir dosya 'Name.dat'ta Boşluklu Bir Dosya' olarak adlandırılırsa, komutu çalıştırmak bana bu gibi hatalar veriyor

rm: cannot remove `/var/tmp/A': No such file or directory
rm: cannot remove `File': No such file or directory
rm: cannot remove `With': No such file or directory
rm: cannot remove `Spaces': No such file or directory
rm: cannot remove `in': No such file or directory
rm: cannot remove `the': No such file or directory
rm: cannot remove `Name.dat': No such file or directory

Komple dosya yolunu xargs sudo rm'ye dosya adını bozmadan nasıl iletirim.

Yanıtlar:


6

Söylemek find ve xargs farklı bir dosya ayırıcı kullanmak için:

find /var/tmp -print0 | sudo xargs -0 rm

Ya da söyle find yürütmek rm direkt olarak:

sudo find /var/tmp -exec rm {} +

Ya da söyle find dosyaları silmek için:

sudo find /var/tmp -delete

Not: -mindepth 1 Silmeyi önlemek için yararlı olabilir. /var/tmp dizinin kendisi.

... ya da gerçekten, sadece *Özyinelemeli modu ilk etapta kullanacaksanız, bu gerekli değildir.

sudo rm -rf /var/tmp

@raido: Güncellemeye dikkat edin.
grawity

1
Sadece bir detay. Yapmaktan kaçının sudo rm, yürütmeniz gerekiyorsa, çok daha yavaş olacaktır sudo her şeyden önce rm. Komutu bir kök konsolda çalıştırın.
fmanco

@criziot: O zamandan beri yavaş olmamalı xargs ve -exec + form yürütecek rm tonlarca dosya için sadece bir kez. Biri hala onu değiştirebilir sudo xargs ve sudo find sorunu önlemek için.
grawity

@grawity: Ben fark etmedim -exec + form. Aslında var olduğunun bile farkında değildim. Ama belli ki haklısın. Teşekkürler
fmanco

1

Yalnızca dizinleri silmeyle ilgili sorunlardan kaçınmak için önceki cevaba eklemek için:

find /var/tmp -type f -exec sudo rm {} +

find /var/tmp -depth -type d -exec sudo rmdir {} +

rmdir -p -depth kullanmak yerine bir dizinin tüm alt öğelerini kaldırmak için de kullanılabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.