Удаление определенных файлов в командной строке

Удаление определенных файлов в командной строке

У меня есть файлыИмя_файла_1,Имя_файла_2...Имя_файла_100000где fileNames нумеруются последовательно. Как удалить файлы индекса больше, скажем100?

решение1

Если имена файлов пронумерованы последовательно, просто выполните следующую команду:

rm fileName_{100..100000}

решение2

Вы также можете попробовать эту команду,

for i in $(seq 100 100000); do rm fileName_$i; done

Он удалит все файлы (в диапазоне от 100 до 100000), если имя файла содержит цифры в последовательном порядке.

решение3

В общем, есть несколько способов добиться этого:

rm fileName_{100..100000}

будет расширен оболочкой примерно до 100 000 имен файлов. Если базовое имя — длинный путь, а число достаточно велико, вы можете фактически превысить максимальную длину командной строки при таком подходе.

Петляfor

for i in $(seq 100 100000); do rm fileName_$i; done

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

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

Обычно решения, основанные на , findлучше, поскольку они работают только с файлами, которые действительно там находятся (во время обнаружения). Однако есть некоторые тонкие различия:

find . -name 'fileName_[100-100000]' -exec rm {} \;

все равно запустит rmпрограмму около 100 000 раз, в то время как замена final \;на +попытается минимизировать количество подпроцессов. Оба метода, вероятно, будут (намного или немного) медленнее, чем использование , -deleteкоторое вообще не использует внешние команды, а вместо этого вызывает системные вызовы.

Однако,всегдаСначала проверьте, действительно ли шаблон соответствует файлам, на которые вы хотите нацелиться:

stefan@tuxedo ~ % mkdir askubuntu
stefan@tuxedo ~ % touch askubuntu/filename_{1..1000}
stefan@tuxedo ~ % find askubuntu -name 'filename_[100-1000]' 
askubuntu/filename_1

В этом случае вы удалите файл, который хотели сохранить, и оставите файлы, которые следовало удалить.

решение4

Используйте следующую команду:

find . -name 'fileName_[100-100000]' -exec rm {} \;

Это приведет к удалению файлов от 100 до 100000.

Больше информации:Сайт

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