Кажется, что этот вопрос задали различными способами. Но я хотел бы использовать 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
Используйте 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
Просто необходимо добавить sudo
к команде:
sudo find /etc -type f -name '*omero*' -delete
и ошибка уйдет. Так как причина состоит в том, что те файлы принадлежат root user
и могут только быть, удаляют теми, которые в sudo
групповой пользователь и пользователь root.
Существуют много, много причин использовать находят, а не комната. Особенно, если Ваша версия находки поддерживает "-удаляют" опцию:
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
во втором.