Удалить файлы в каталоге, в имени которых есть дефис.

Удалить файлы в каталоге, в имени которых есть дефис.

В моей системе macOS есть папка с 7000+ изображений, и мне нужно удалить изображения, в имени которых есть дефис. Я пробовал следующие команды, но не получил ответа после входа cdв каталог (я новичок в терминале):

rm -rf -- -
$ rm ./-
find . -type f -regex '/-/' -exec rm {} \;
find . -name '-*' | xargs rm
find . -regex '/-/' -print0 | xargs -0 rm

решение1

Шаблон *-*будет соответствовать любому имени в текущем каталоге, котороесодержит тире(дословно «имя, содержащее по крайней мере один -, возможно, с префиксом и/или суффиксом в виде какой-либо другой строки»). Это означает, что вы должны иметь возможность сделать

rm ./*-*

или

rm -- *-*

для удаления всех файлов с именами, содержащими -символ, в текущем каталоге.

В zshоболочке использование *-*(.)шаблона ограничит соответствие только обычным файлам (не каталогам, хотя rmв любом случае не позволит удалить каталоги).

Если файлов слишком много для rmобработки за один раз, используйте findследующий код:

find . -maxdepth 1 -type f -name '*-*' -delete

Я -maxdepth 1ограничиваю поиск только текущим каталогом и добавляю -type fвозможность удалять только обычные файлы.

Вы также можете использовать (довольно медленный) цикл:

for name in ./*-*; do
    rm "$name"
done

Некоторые люди предпочитают «однострочные» предложения, и этот цикл можно записать так:

for name in ./*-*; do rm "$name"; done

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

Связанный контент