Рейтинг:1

Поиск и удаление файлов с определенным расширением или оканчивающихся на номер

флаг cn

Я хочу, чтобы мой скрипт находил файлы определенного типа и удалял их.

я знаю это найти путь/к/каталогу/ -type f -name '*.ext' -delete найдет и удалит все файлы с расширением.

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

Я пробовал следующие команды без успеха:

найти путь/к/каталогу/ -type f -name '*.ext' -name '*[0-9].* -delete
найти путь/к/каталогу/ -type f -name '*.ext' '*[0-9].* -delete
найти путь/к/каталогу/ -type f -name '*.ext,*[0-9].* -delete

Ничего из этого не сработало, я не уверен, что именно мне нужно изменить или что я делаю неправильно.

Рейтинг:1
флаг hr

удалить файлы, оканчивающиеся на расширение, а также любые файлы, оканчивающиеся на число, независимо от расширения

Для этого требуются условия, соединенные логическим ИЛИ вместо логического И по умолчанию (круглые скобки необходимы, потому что ИЛИ имеет более низкий приоритет, чем И, и они должны быть экранированы или заключены в кавычки, чтобы оболочка передала их в найти как литералы):

найти путь/к/каталогу/ -type f \( -name '*.ext' -o -name '*[0-9].*' \) -print

Изменять -Распечатать к -удалять как только вы уверены, что он делает правильную вещь. В реализации GNU найти, вы можете использовать -или же на месте Если вы предпочитаете.

Mahmoud avatar
флаг cn
спасибо за быстрый ответ, я новичок в написании сценариев, я полагаю, что -o означает «или», но зачем мне \ в этом?
флаг hr
@Mahmoud круглые скобки должны быть экранированы `\(` или заключены в кавычки `'('`, чтобы оболочка передала их в `find` как литералы
Mahmoud avatar
флаг cn
поэтому я мог бы написать это ```\( -name '*.ext' -o -name '*[0-9].*' \)``` вместо этого ```'( -name '*.ext ' -o -name '*[0-9].*' )'``` верно?
флаг hr
@ Махмуд нет, каждое `(` или `)` нужно заключать в кавычки как отдельный токен `'(' -name '*.ext' -o -name '*[0-9].*' ')'`

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.