На данный момент это то, что я делаю:
Шаг 1:
locate fooBar
/home/abc/fooBar
/home/abc/Music/fooBar
Шаг 2:
Выполните удаление вручную, скопировав каждую строку.
rm /home/abc/fooBar
rm /home/abc/Music/fooBar
Как мне сделать это за один шаг? Что-то вроде
найдите fooBar> rm
Благодарю.
command-line
pipe
theTuxRacer
источник
источник
rm -i
найти fooBar``Ответы:
Как уже упоминалось в других разделах, xargs - ваш друг. Это действительно мощный инструмент, и я постараюсь объяснить его и обойти обычную ошибку.
Что делает xargs, так это берет строку из ввода и добавляет ее к другой команде, выполняя эту другую команду для каждой строки во вводе. Таким образом , путем ввода
locate foobar | xargs rm -f
, вывода команды локализации будет исправлен на конец этогоrm -f
команды, и выполняется для каждой строки создаваемогоlocate foobar
.Гоча:
Но что если в ваших строках есть пробелы, возвращаемые функцией locate? Это нарушит
rm -f
команду, потому что аргументы, передаваемые в rm, должны быть файлами (если вы не используете ключ -r), а путь к файлу должен быть экранирован или заключен в кавычки, если он содержит пробелы.xargs предоставляет ключ -i, чтобы заменить ввод в следующей команде, а не просто добавлять ее. Так что я бы изменил предложение на
который теперь будет ломаться, только если имена файлов, возвращаемые функцией locate, содержали апострофы.
Я должен согласиться с qbi, что вы должны быть осторожны с использованием rm -f ! Используйте флаг -p для xargs, или просто запустите foobar locate перед передачей его в xargs, или удалите -f из rm.
источник
-0
(--null
) для поиска и xargs. Это использует безопасный символ ASCII NUL для разделения имен файлов:locate -0 foobar | xargs -0 rm
Возможно, вам понадобится еще несколько вариантов для использования с
xargs
. Проверьте это сначала сxargs -p
. Если все в порядке, уберите-p
опцию:источник
Чтобы удалить все файлы, которые возвращает locate, введите в своем терминале следующую команду
locate foobar | xargs rm -f
источник