Ответы:
Если имена файлов пронумерованы последовательно, просто выполните следующую команду:
rm fileName_{100..100000}
execвызовом на число аргументов, которые может иметь процесс. Вы можете получить его с помощью getconf ARG_MAX. Например, в моей системе это 2097152(~ 2,1 миллиона). Это означает, что rm(который не является встроенным) потерпит неудачу с большим количеством файлов. Встроенные команды не имеют этой проблемы, как и другие предложенные решения.
Вы можете попробовать эту команду также,
for i in $(seq 100 100000); do rm fileName_$i; done
Он удалит все файлы (в диапазоне от 100 до 100000), если имя файла содержит числа в последовательном порядке.
В общем, у вас есть несколько способов добиться этого:
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программу около 100000 раз, заменяя окончательную \;В +будет пытаться минимизировать количество подпроцессов. Оба метода, вероятно, будут (намного или чуть) медленнее, чем те, -deleteкоторые вообще не используют внешние команды, а вместо этого вызывают системные вызовы.
Тем не менее, всегда сначала проверяйте, соответствует ли шаблон файлам, на которые вы хотите нацелиться:
stefan@tuxedo ~ % mkdir askubuntu
stefan@tuxedo ~ % touch askubuntu/filename_{1..1000}
stefan@tuxedo ~ % find askubuntu -name 'filename_[100-1000]'
askubuntu/filename_1
Таким образом, в этом случае вы удалили файл, который хотели сохранить, и оставили файлы, которые должны были быть удалены.
Используйте следующую команду:
find . -name 'fileName_[100-100000]' -exec rm {} \;
Это приведет к удалению файлов от 100 до 100000.
Больше информации: Сайт
[100-100000] символов соответствует только одному символу, поэтому он может соответствовать только 0 или 1.
{x..y}весь список. Например, если вы используетеecho test{1..3}его, он будет расширенecho test1 test2 test3и затем выполнен. Как видите, он печатаетtest1 test2 test3. Точно так же, если{x..y}он не связан с каким-либо аргументом, он просто поместит туда цифры. Напримерecho test {1..3}, просто распечататьtest 1 2 3.