Как удалить все файлы, которые возвращает locate

На данный момент он делает то, что я делаю:

Шаг 1:

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

Шаг 2:

Выполните удаление вручную, скопировав каждую строку .

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

Как мне сделать это за один шаг? Что-то вроде

locate fooBar> rm

Спасибо.

13
задан 21 December 2010 в 14:04

3 ответа

Как уже упоминали другие главы, xargs - твой друг. Это действительно мощный инструмент, и я постараюсь объяснить его и обойти обычную ошибку.

Что делает xargs, так это берет строку из ввода и добавляет ее к другой команде, выполняя эту другую команду для каждой строки во входе. Таким образом, введя locate foobar | xargs rm -f, вывод команды locate будет пропатчен в конце команды rm -f и выполнен для каждой строки, созданной locate foobar.

Готча:

Но что если в ваших строках есть пробелы, возвращаемые функцией locate? Это нарушит команду rm -f, поскольку аргументы, передаваемые в rm, должны быть файлами (если вы не используете ключ -r), а путь к файлу должен быть экранирован или заключен в кавычки, если он содержит пробелы.

xargs предоставляет ключ -i, чтобы заменить входные данные в следующей команде вместо простого добавления. Поэтому я бы изменил предложение на

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

, которое теперь будет нарушаться только в том случае, если имена файлов, возвращаемые функцией locate, содержали апострофы.

Я должен согласиться с qbi, что вы должны быть осторожны при использовании rm -f ! Используйте флаг -p для xargs, или просто запустите файл locate foobar перед передачей его в xargs, или удалите -f из rm.

locate foobar | xargs -p -ixxx rm -f 'xxx'
0
ответ дан 21 December 2010 в 14:04

Возможно, вам понадобятся дополнительные опции для использования с xargs. Проверьте это сначала с помощью xargs -p. Если все в порядке, уберите опцию -p:

locate foobar | xargs rm
0
ответ дан 21 December 2010 в 14:04

Чтобы удалить все файлы, возвращаемые функцией locate, введите в своем терминале следующую команду

locate foobar | xargs rm -f

0
ответ дан 21 December 2010 в 14:04

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

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