Locate tarafından döndürülen tüm dosyalar nasıl silinir


13

Şu anda benim yaptığım şey:

Aşama 1:

locate fooBar
/home/abc/fooBar
/home/abc/Music/fooBar

Adım 2:

Her satırı kopyalayıp yapıştırarak manuel olarak bir kaldırma işlemi gerçekleştirin.

rm /home/abc/fooBar
rm /home/abc/Music/fooBar

Bunu tek adımda nasıl yapabilirim? Gibi bir şey

fooBar'ı bulun> rm

Teşekkürler.


Bunu istiyor musun? rm -i fooBar'ı bulun ``
LFC_fan

Yukarıdakilerin ne yaptığından emin değilim. Ben sadece bir locate komutu çalıştırdığınızda döndürülen yollardan tüm dosyaları kaldırmak istiyorum.
theTuxRacer

Yanıtlar:


13

Diğer ahbapların daha önce de bahsettiği gibi, xargs arkadaşın. Bu gerçekten güçlü bir araç ve bunu açıklamaya çalışacağım ve ortak bir sorun için bir çözüm sunacağım.

Xargs'ın yaptığı şey, girişten bir satır almak ve girişi başka bir komuta eklemek, girişteki her satır için diğer komutu yürütmektir. Yani yazarak locate foobar | xargs rm -fbulup komutunun çıktısı alınacaktır ucuna yamalı bir rm -fkomuta ve ürettiği her satır için idam locate foobar.

Yakaladım:

Peki ya satır (lar) ınızda locate tarafından döndürülen boşluklar varsa? Bu rm -fkomut rm'ye iletilen argümanların dosya olması gerektiğinden (-r anahtarını kullanmadığınız sürece) ve boşluk içeriyorsa bir dosya yolunun kaçması veya alıntılanması gerektiği için komutu kıracaktır.

xargs , girdiyi yerine eklemek yerine aşağıdaki komuta değiştirmek için -i anahtarını sağlar . Bu yüzden öneriyi

locate foobar | xargs -ixxx rm -f 'xxx'

artık yalnızca locate tarafından döndürülen dosya adları kesme işaretleri içeriyorsa bozulacaktır.

Qbi ile hemfikirim, rm -f kullanmaya dikkat etmelisin ! Xargs için -p bayrağını kullanın veya xargs'a beslemeden önce locobar'ı kendiniz çalıştırın veya -f'yi rm'den bırakın.

locate foobar | xargs -p -ixxx rm -f 'xxx'

9
Adlarında egzotik karakterler (yeni satırlar, tırnak işaretleri, kesme işaretleri vb.) Bulunan dosyalara karşı sağlam olmak için, -0( --null) seçeneğini bulmak ve (xargs) bulmak için ( ) seçeneğini kullanabilirsiniz. Bu, dosya adlarını ayırmak için güvenli ASCII NUL karakterini kullanır:locate -0 foobar | xargs -0 rm
Jukka Matilainen

1
Cevap için +1 ve
gotcha'dan

Denedim ama işe yaramadı.
Pronoy999

Kısmen çalıştı
SteveS

7

Birlikte kullanmak için biraz daha seçeneğe ihtiyacınız olabilir xargs. Önce ile test edin xargs -p. Tamamsa, -pseçeneği kaldırın :

locate foobar | xargs rm

6

Locate tarafından döndürülen tüm dosyaları silmek için terminalinizde aşağıdaki komutu verin

locate foobar | xargs rm -f

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.