Я попытался запустить
locate *.orig | xargs rm
, но он сказал No such file or directory
Я видел способы сделать это с find
, но locate возвращает полный путь к объекту, поэтому должно быть возможно
Хитрость: сохраните все пути в файле 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
Если имена файлов содержат пробелы, вы должны использовать
locate -0 $something | xargs -0 rm
со страницы руководства locate
:
blockquote>
-0
,--null
Разделить записи на выходе с использованием символа ASCII NUL вместо записи каждой записи в отдельной строке. Эта опция предназначена для взаимодействия с опцией --null GNU xargs (1).или
locate $something | while read f; do rm "$f"; done
Кроме того, вы должны защищать
*.orig
с помощью кавычек, чтобы избежать расширения оболочки, и передать его, чтобы найти нетронутым.
locate не выполняет сглаживание, но оболочка делает. Оболочка расширяет * .orig до того, что она находит в текущем каталоге, что соответствует * .orig.
Просто используйте
locate .orig
, и если это даст вам то, что вам нужно
locate .orig | xargs rm
или, как упоминал энзотиб
locate -0 .orig | xargs -0 rm
, если есть пробелы в именах файлов.
Команда locate *.orig | xargs rm
на самом деле работает, но происходило то, что locate
находил *.orig
файлы в мусорном ведре и rm
выдает ошибку No such file or directory
при попытке удалить файлы в мусорном ведре. .