Рекурсивно удалите те же файлы, найденные с, располагаются

Кажется, что этот вопрос задали различными способами. Но я хотел бы использовать rm вместо find.

Я следовал за многими объяснениями относительно того, как использовать find, но у меня есть проблема с выполнением find команда. Когда я использую, располагаются, я получаю следующий вывод:

maxgitt@mgpc:/etc$ locate omero
/etc/nginx/conf.d/omeroweb.conf
/etc/rc0.d/K01omero-web
/etc/rc1.d/K01omero-web
/etc/rc2.d/S03omero-web
/etc/rc3.d/S03omero-web
/etc/rc4.d/S03omero-web
/etc/rc5.d/S03omero-web
/etc/rc6.d/K01omero-web

Но затем когда я пытаюсь использовать, находят для удаления соответствующих файлов, я получаю следующую ошибку.

maxgitt@mgpc:/etc$ find -type f -name '*omero*'
./etc/rc0.d/K01omero-web
./etc/rc1.d/K01omero-web
./etc/rc2.d/S03omero-web
./etc/rc3.d/S03omero-web
./etc/rc4.d/S03omero-web
./etc/rc5.d/S03omero-web
./etc/rc6.d/K01omero-web
find: ‘./cups/ssl’: Permission denied
find: ‘./ppp/peers’: Permission denied
find: ‘./polkit-1/localauthority’: Permission denied
find: ‘./ssl/private’: Permission denied
./nginx/conf.d/omeroweb.conf
find: ‘./chatscripts’: Permission denied
find: ‘./docker’: Permission denied

Таким образом, я решил вместо этого использовать команду:

maxgitt@mgpc:/etc$ sudo rm -rf /etc/*/*omero-web*

Но я предпочел бы мочь удалить все файлы в etc/ каталог и его соответствующие подкаталоги. Меня оставляют с одним файлом из-за моего hacky rm команда:

maxgitt@mgpc:/etc$ locate omero
/etc/nginx/conf.d/omeroweb.conf
1
задан 6 October 2017 в 01:39

3 ответа

Используйте sudo

И всегда делайте пробный прогон прежде, чем удалить, чтобы гарантировать, что Вы не удаляете более, чем обменянный на.

sudo find -type f -name '*omero*'

Затем принимая список выглядит хорошим

    sudo find -type f -name '*omero*' -delete

, или укажите местоположение для поиска (Вы уже знаете, что эти файлы находятся в / и т.д.)

sudo find /etc -iname '*omero*' -delete

- удаляют, быстрее, чем -exec rm {} \; или -print0 | xargs -0 rm, поскольку это не должно порождать другой процесс.

РЕДАКТИРОВАНИЕ: Из комментариев

for i in $(locate omero) ; do rm $i ; done
4
ответ дан 3 December 2019 в 06:22

Просто необходимо добавить sudo к команде:

sudo find /etc -type f -name '*omero*' -delete

и ошибка уйдет. Так как причина состоит в том, что те файлы принадлежат root user и могут только быть, удаляют теми, которые в sudo групповой пользователь и пользователь root.

3
ответ дан 3 December 2019 в 06:22

Существуют много, много причин использовать находят, а не комната. Особенно, если Ваша версия находки поддерживает "-удаляют" опцию:

  • Если Ваши имена файлов содержат пробелы или новые строки, Ваш rm команда не будет работать и может даже удалить неправильные файлы.
  • Если будет много файлов для удаления, то команда перестанет работать для превышения максимальной длины командной строки.

Если Ваши поддержки находки "-удаляют":

find -type f -path "*omero*" -delete

Если Ваша находка не поддерживает "-удаляют", и требует стартового пути:

find . -type f -path "*omero*" -print0 | xargs -0 rm

Это'-print0 ... -0'важно. Это говорит, находят для вывода имен файлов, разграниченных NUL, и xargs-0 будет ожидать, что NUL разграничил имена файлов. Таким образом, пробелы и новые строки в Ваших именах файлов не вызовут проблемы.

Кроме того, я использую -path вместо -name более тесно соответствовать, что "располагается", дает Вам. Однако это означает, что файл будет удален, если это, окажется, будет под каталогом с "omero" в нем. Это, вероятно, не, что Вы хотите, и необходимо использовать -name вместо этого.

С этим из пути, если Вы уверены в том, что Вы вошли в конец, помещенный sudo впереди первой версии. Или sudo впереди обоих find и xargs во втором.

1
ответ дан 3 December 2019 в 06:22

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

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