Результати трубопроводу розмістити в rm


11

Я спробував бігти

locate *.orig | xargs rm

але воно сказало No such file or directory

Я бачив способи це зробити, findале locate повертає повний шлях до об'єкта, так що це має бути можливим

Відповіді:


20

Якщо назви файлів містять пробіли, які слід використовувати

locate -0 $something | xargs -0 rm

З locateчоловічої сторінки :

-0, --nullВідокремте записи на виході, використовуючи символ ASCII NUL, замість того, щоб записувати кожен запис в окремий рядок. Ця опція розроблена для сумісності з опцією --null GNU xargs (1).

або

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

Крім того, вам слід захистити *.origкотирування, щоб уникнути розширення оболонки та передати її, щоб знайти її недоторканою.


Що ви маєте на увазі під "розширенням оболонки"?
солдат.мот

+1 для вашого другого прикладу. Я завжди використовую, | while readоскільки мій домашній каталог заповнений файлами з пробілами.
матір

@ Soldier.moth: якщо в поточній папці є файли, відповідні шаблону *.orig, оболонка розширить шаблон до, скажімо file1.orig file2.orig ..., так, що locateне буде бачити точний рядок *.origяк слід.
enzotib

Крім того, щоб отримати зображення, ви можете потім знайти tr '\n' '\0'.
Пабло Біанкі

2

Це xargsне такxarg


Це те, що я мав на увазі, набравши запитання з пам’яті, дякую, хоча.
солдат.мот

О, добре. Це виглядало як помилка, яку ви отримаєте після введення неправильної команди після |
мако

0

Команда locate *.orig | xargs rmнасправді працює, але те, що відбувалося, було те, що locateбуло знайти *.origфайли у смітнику та rmвиправити помилку No such file or directoryпри спробі видалити файли у смітнику.


Ви повинні додати інформацію як "коментар" до оригінальної відповіді, або ви можете відредагувати оригінальну відповідь. Це не відповідь на ваше власне запитання.
enzotib

Це відповідь на моє запитання, чому я отримав помилку через те, що locate знаходив * .orig файли у кошику для сміття, а rm не міг їх видалити. Я прийняв вашу відповідь і проголосував як за інші відповіді, тому що вони були добре написані і можуть допомогти тому, хто піде згодом.
солдат.мот

0

locate не робить глобус, але оболонка робить. Оболонка розширює * .orig до того, що знаходиться в поточному каталозі, що відповідає * .orig.

Просто використовуйте

locate .orig

і якщо ви отримаєте те, що вам потрібно

locate .orig | xargs rm

або, як зазначено ензотиб

locate -0 .orig | xargs -0 rm

якщо у файлах файлів є пробіли.


0

Підступ: збережіть усі шляхи у файлі tmp. потім, петля на ньому:

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

rm -rf /tmp/tmp.txt 
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.