
У меня есть файлыИмя_файла_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.
Больше информации:Сайт