На этот вопрос уже есть ответ здесь:
Мой предварительный пост об удалении файла с одним именем в системе, но на самом деле мне нужно удалить большой диапазон файлов.
предыдущий пост
Как удалить файлы в разных папках через терминал?
Например
Они junkImg-5.png
к junkImg-60.png
,, то есть есть junkImg-30
, junkImg-45
... и т.д..
Есть ли быстрая команда, чтобы удалить их в командной строке?
я пытался
find /project/test/ -name 'junkImg-5*' -exec rm -f {} \ ;
но это слишком медленно, и у меня так много изображений. Есть ли способ, которым linux может указать диапазон? Большое спасибо!
linux
command-line
FlyingCat
источник
источник
meaning there are junkImg-30, junkImg45...
- Вы можете уточнить, что вы имеете в виду?rm junkImg-* -f
не работает? -f предотвращает сообщение «Вы уверены»?Ответы:
Просто используйте расширение скобки, чтобы удалить диапазон файлов:
Это удалит файлы junkImg от 5 до 60 с одним
rm
процессом. Вы также можете сначала заменитьrm
команду,ls
чтобы убедиться, что она выбирает нужные файлы, а затем заменить ее сноваrm
.источник
Find использует Shell Pattern Matching для предиката -name , поэтому вы можете использовать предикат -or и эти шаблоны:
Вы также можете исключить первые четыре файла, используя предикат -not :
Чтобы проверить правильность работы команд, всегда запускайте их без -delete в первую очередь. Это перечислит файлы вместо того, чтобы удалить их.
источник
Вы запускаете новую
rm
команду для каждого удаления. Это не самый быстрый способ. Вам нужно сделать это, только если у вас есть столько файлов, что вы не можете перечислить их все за один раз.Чтобы сделать вещи быстрее, либо:
-exec rm
с-ls
и трубы ее , хотя xargs. Добавьте -print0, если вы ожидаете, что некоторые имена файлов будут трудными (например, с пробелом в них).-delete
.источник