На данный момент он делает то, что я делаю:
Шаг 1:
locate fooBar
/home/abc/fooBar
/home/abc/Music/fooBar
Шаг 2:
Выполните удаление вручную, скопировав каждую строку .
rm /home/abc/fooBar
rm /home/abc/Music/fooBar
Как мне сделать это за один шаг? Что-то вроде
locate fooBar> rm
Спасибо.
Как уже упоминали другие главы, 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'
Возможно, вам понадобятся дополнительные опции для использования с xargs
. Проверьте это сначала с помощью xargs -p
. Если все в порядке, уберите опцию -p
:
locate foobar | xargs rm
Чтобы удалить все файлы, возвращаемые функцией locate, введите в своем терминале следующую команду
locate foobar | xargs rm -f