Как удалить много файлов с похожими именами?

Как удалить много файлов с похожими именами?

У меня много txt-файлов, названных как file1.txt file2.txt file3.txt ... file1000.txt Как удалить все эти файлы? Я новичок в unix и беспокоюсь о том, что могу случайно удалить другие файлы в своем каталоге.

Я посмотрел другие вопросы, но не уверен, могу ли я сделать что-то вроде

rm -v !("differentfile"|"anotherfile"|"otherfile"|"finalfile") 

и поэтому удалить все мои файлы с одинаковым именем и просто разными номерами и оставить несколько нужных мне? И эта строка должна удалять только файлы в моем рабочем каталоге/папке, верно?

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

решение1

rm file*.txtудалит все файлы в текущем каталоге, имена которых начинаются со строки fileи заканчиваются на строку .txt.

Если естьмногоиз них вы получите ошибку "Список аргументов слишком длинный". В этом случае вы можете использовать

find . -maxdepth 1 -name 'file*.txt' -delete

вместо.

Это будет использовать findкоманду для поиска любого файла, имя которого совпадает file*.txtв текущем каталоге, и удаления его. Опция -maxdepth 1запрещает findвходить в любые подкаталоги, кроме .(текущего каталога).

Команда не делает различий между файлами и каталогами (как и rm file*.txtне делала бы ни того, ни другого). Если вы хотите быть уверены, что удаляете только обычные файлы, используйте

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

Для findреализаций, не имеющих нестандартных -deleteи/или -maxdepthопций, используйте

find . ! -path . -prune -type f -name 'file*.txt' -exec rm -f {} +

Или вы можете просто прибегнуть к простому, но медленному циклу:

for name in file*.txt; do
    rm -f "$name"
done

решение2

Если других файлов с такой же структурой нет, используйте так называемый globbling с префиксом 'file'. Звездочка означает любую другую строку (включая пустую строку). Сначала проверьте с помощью 'ls' (список) вместо 'rm':

ls file*.txt

Вы также можете сузить это до как минимум одного числа после слова «file» и всего остального после него:

ls file[[:digit:]]*.txt

решение3

Если вы не уверены, будут ли в ваш шаблон включены другие файлы, вы можете, например:

  • переместите их в другую (временную) папку, mv PATTERNпроверьте список файлов и, если все в порядке, удалите временную папку.

  • используйте rm -i PATTERN. Вам придется подтверждать каждое удаление вручную.

  • прежде чем сделать это, rmвы можете сделать ls PATTERNили echo PATTERNи проверить, в порядке ли список.

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