В моей системе 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
... хотя ввод его в виде многострочной команды, безусловно, возможен в большинстве современных оболочек.