Труба результаты поиска в rm

Я попытался запустить

locate *.orig | xargs rm

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

Я видел способы сделать это с find, но locate возвращает полный путь к объекту, поэтому должно быть возможно

11
задан 22 October 2010 в 23:35

5 ответов

Хитрость: сохраните все пути в файле 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 
0
ответ дан 22 October 2010 в 23:35

Если имена файлов содержат пробелы, вы должны использовать

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 с помощью кавычек, чтобы избежать расширения оболочки, и передать его, чтобы найти нетронутым.

0
ответ дан 22 October 2010 в 23:35

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

Просто используйте

locate .orig

, и если это даст вам то, что вам нужно

locate .orig | xargs rm

или, как упоминал энзотиб

locate -0 .orig | xargs -0 rm

, если есть пробелы в именах файлов.

0
ответ дан 22 October 2010 в 23:35

Это xargs не xarg

0
ответ дан 22 October 2010 в 23:35

Команда locate *.orig | xargs rm на самом деле работает, но происходило то, что locate находил *.orig файлы в мусорном ведре и rm выдает ошибку No such file or directory при попытке удалить файлы в мусорном ведре. .

0
ответ дан 22 October 2010 в 23:35

Другие вопросы по тегам:

Похожие вопросы: