Как уже упоминалось в других разделах, xargs - ваш друг. Это действительно мощный инструмент, и я постараюсь объяснить его и обойти обычную ошибку.
Что делает xargs, так это берет строку из ввода и добавляет ее к другой команде, выполняя эту другую команду для каждой строки во вводе. Таким образом , путем ввода locate foobar | xargs rm -f
, вывода команды локализации будет исправлен на конец этого rm -f
команды, и выполняется для каждой строки создаваемого locate foobar
.
Гоча:
Но что если в ваших строках есть пробелы, возвращаемые функцией locate? Это нарушит rm -f
команду, потому что аргументы, передаваемые в rm, должны быть файлами (если вы не используете ключ -r), а путь к файлу должен быть экранирован или заключен в кавычки, если он содержит пробелы.
xargs предоставляет ключ -i, чтобы заменить ввод в следующей команде, а не просто добавлять ее. Так что я бы изменил предложение на
locate foobar | xargs -ixxx rm -f 'xxx'
который теперь будет ломаться, только если имена файлов, возвращаемые функцией locate, содержали апострофы.
Я должен согласиться с qbi, что вы должны быть осторожны с использованием rm -f ! Используйте флаг -p для xargs, или просто запустите foobar locate перед передачей его в xargs, или удалите -f из rm.
locate foobar | xargs -p -ixxx rm -f 'xxx'
rm -i
найти fooBar``