Rm içine locate boru sonuçları


11

Koşmayı denedim

locate *.orig | xargs rm

ama dedi No such file or directory

Bunu yapmak için yollar gördüm findama bulmak mümkün böylece nesnenin tam yolunu döndürür

Yanıtlar:


20

Dosya adları boşluk içeriyorsa kullanmanız gerekir

locate -0 $something | xargs -0 rm

Gönderen locateadam sayfası :

-0, --nullHer girişi ayrı bir satıra yazmak yerine ASCII NUL karakterini kullanarak çıkıştaki girdileri ayırın. Bu seçenek, GNU xargs (1) öğesinin --null seçeneğiyle birlikte çalışabilirlik için tasarlanmıştır.

veya

locate $something | while read f; do rm "$f"; done

Ayrıca, *.origkabuk genişlemesini önlemek için tırnak işareti ile korumalı ve dokunulmamış yeri bulmak için geçmelisiniz.


"Kabuk genleşmesi" ile ne demek istiyorsun?
soldier.moth

İkinci örneğiniz için +1. | while readAna dizinim boşluklu dosyalarla dolu olduğu için her zaman kullanıyorum .
matpie

@ Soldier.moth: geçerli klasörde desene karşılık gelen dosyalar varsa *.orig, kabuk deseni diyelim file1.orig file2.orig ..., yani locatetam dizeyi *.origolması gerektiği gibi görmez .
enzotib

Ayrıca çıktı bulmak için grep sonra yapabilirsiniz tr '\n' '\0'.
Pablo Bianchi

2

O var xargsdeğilxarg


Demek istediğim bu hafızadan soru yazmaktı, teşekkürler.
soldier.moth

Ah tamam. Sonra yanlış bir komut koymak hata alıyorum |
maco

0

Komut locate *.orig | xargs rmgerçekten işe yarıyor, ancak olan locateşey *.orig, çöp kutusundaki dosyaları bulmaktı ve çöp kutusundaki dosyaları silmeye çalışırken rmhatayı tükürüyordu No such file or directory.


Orijinal yanıta "yorum" olarak bilgi eklemelisiniz veya orijinal yanıtı düzenleyebilirsiniz. Bu kendi sorunuzun cevabı değil.
enzotib

Sorumun cevabını almak için neden soruya bir cevap bulun çünkü bulun çöp kutusu * .orig dosyaları bulmak oldu ve rm onları silemedi. Cevabınızı kabul ettim ve her iki yanıtı da oyladım çünkü iyi yazılmışlar ve daha sonra gelen birine yardımcı olabilirler.
soldier.moth

0

locate globbing yapmaz, ama kabuk yapar. Kabuk, * .orig dosyasını geçerli dizinde * .orig ile eşleşen öğeye genişletir.

Sadece kullan

locate .orig

ve eğer bu size ihtiyacınız olanı getirirse

locate .orig | xargs rm

veya belirtildiği gibi enzotib

locate -0 .orig | xargs -0 rm

dosya adlarında Whitespace varsa.


0

Hile: Tüm yolları tmp dosyasına kaydedin. sonra, Döngü:

#!/bin/bash
locate .orig /tmp/tmp.txt
while read line
do
    pth=$line
    rm "$pth" 
done < /tmp/tmp.txt

rm -rf /tmp/tmp.txt 
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.