Як видалити всі файли, які повертаються locate


13

На даний момент це те, що я роблю:

Крок 1:

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

Крок 2:

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

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

Як це зробити за один крок? Щось на зразок

знайти fooBar> rm

Спасибі.


Ви цього хочете? rm -i Знайдіть fooBar``
LFC_fan

Я не впевнений, що робить вище. Я просто хочу видалити всі файли з шляхів, які повертаються, коли я запускаю команду locate.
theTuxRacer

Відповіді:


13

Як уже говорили інші члени, 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'

який тепер розіб'ється лише в тому випадку, якщо імена файлів, повернені за адресою, містять апострофи.

Мені доводиться погоджуватися з qbi, що ви повинні бути обережнішими щодо використання rm -f ! Використовуйте прапор -p для xargs, або просто запустіть foobar locate сам перед тим, як подавати його до xargs, або скиньте -f з rm.

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

9
Щоб бути надійними щодо файлів із екзотичними символами (нові рядки, цитати, апострофи тощо) у їхніх іменах, ви можете використовувати опцію -0( --null) для пошуку та xargs. При цьому використовується безпечний символ ASCII NUL для розділення імен файлів:locate -0 foobar | xargs -0 rm
Jukka Matilainen

1
+1 для відповіді та вибрано для згадки про gotcha ^ _ ^
theTuxRacer

Я спробував це, але не вийшло.
Pronoy999

Працював частково
SteveS

7

Можливо, вам знадобиться ще кілька варіантів використання xargs. Спершу тестуйте xargs -p. Якщо це нормально, виберіть -pваріант:

locate foobar | xargs rm

6

Щоб видалити всі файли, які повертаються шляхом пошуку, видайте наступну команду у своєму терміналі

locate foobar | xargs rm -f

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.