Как удалить несколько файлов в Linux? [Дубликат]

0

Мой предварительный пост об удалении файла с одним именем в системе, но на самом деле мне нужно удалить большой диапазон файлов.

предыдущий пост

Как удалить файлы в разных папках через терминал?

Например

Они junkImg-5.pngк junkImg-60.png,, то есть есть junkImg-30, junkImg-45... и т.д..

Есть ли быстрая команда, чтобы удалить их в командной строке?

я пытался

find /project/test/ -name 'junkImg-5*' -exec rm -f {} \ ;

но это слишком медленно, и у меня так много изображений. Есть ли способ, которым linux может указать диапазон? Большое спасибо!

FlyingCat
источник
meaning there are junkImg-30, junkImg45...- Вы можете уточнить, что вы имеете в виду?
Подозреваемый
Я имею в виду, что есть много файлов с именами, такими как junkImg-10, junkImg-11, junkImg-12, от всех до junkImg-60
FlyingCat
Просто rm junkImg-* -fне работает? -f предотвращает сообщение «Вы уверены»?
Натан C
Мне нужно сохранить junkImg-1 до junkImg-4, чтобы rm junkImg- * не работал
FlyingCat

Ответы:

6

Просто используйте расширение скобки, чтобы удалить диапазон файлов:

rm /project/test/junkImg-{5..60}.png

Это удалит файлы junkImg от 5 до 60 с одним rmпроцессом. Вы также можете сначала заменить rmкоманду, lsчтобы убедиться, что она выбирает нужные файлы, а затем заменить ее снова rm.

Роберто Гомес
источник
Если все изображения находятся в одном каталоге, то это определенно правильный путь. Ссылка на предыдущий пост ОП ( Как удалить файлы в разных папках? ) Заставила меня думать иначе.
Деннис
2

Find использует Shell Pattern Matching для предиката -name , поэтому вы можете использовать предикат -or и эти шаблоны:

find DIRECTORY -name 'junkImg-[5-9].png' -or -name 'junkImg-[1-6]?.png' -delete

Вы также можете исключить первые четыре файла, используя предикат -not :

find DIRECTORY -name 'junkImg-*.png' -not -name 'junkImg-[1-4].png' -delete

Чтобы проверить правильность работы команд, всегда запускайте их без -delete в первую очередь. Это перечислит файлы вместо того, чтобы удалить их.

Деннис
источник
1

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

Чтобы сделать вещи быстрее, либо:

  1. изменить -exec rmс -lsи трубы ее , хотя xargs. Добавьте -print0, если вы ожидаете, что некоторые имена файлов будут трудными (например, с пробелом в них).
  2. Или лучше использовать find встраивать -delete.
Hennes
источник