У меня есть файлы fileName_1 , fileName_2 ... fileName_100000, где fileNames нумеруются последовательно. Как я могу удалить файлы с индексом, превышающим, скажем, 100 ?
command-line
teaLeef
источник
источник
{x..y}
весь список. Например, если вы используетеecho test{1..3}
его, он будет расширенecho test1 test2 test3
и затем выполнен. Как видите, он печатаетtest1 test2 test3
. Точно так же, если{x..y}
он не связан с каким-либо аргументом, он просто поместит туда цифры. Напримерecho test {1..3}
, просто распечататьtest 1 2 3
.exec
вызовом на число аргументов, которые может иметь процесс. Вы можете получить его с помощьюgetconf ARG_MAX
. Например, в моей системе это2097152
(~ 2,1 миллиона). Это означает, чтоrm
(который не является встроенным) потерпит неудачу с большим количеством файлов. Встроенные команды не имеют этой проблемы, как и другие предложенные решения.Вы можете попробовать эту команду также,
Он удалит все файлы (в диапазоне от 100 до 100000), если имя файла содержит числа в последовательном порядке.
источник
В общем, у вас есть несколько способов добиться этого:
будет расширен оболочкой примерно до 100 000 имен файлов. Если базовое имя представляет собой длинный путь и число достаточно велико, вы можете фактически превысить максимальную длину командной строки при таком подходе.
for
циклне страдает от этой проблемы, но является относительно медленным способом удаления файлов, поскольку оболочка должна выполнить подстановку переменной и запустить rm около 100 000 раз.
Оба метода выше могут вызвать предупреждения, если некоторые файлы, скажем,
filename_101
отсутствуют.Как правило, решения, основанные на
find
них, лучше, так как они работают только с файлами, которые на самом деле существуют (во время обнаружения). Тем не менее, есть некоторые тонкие различия:будет по- прежнему запустить
rm
программу около 100000 раз, заменяя окончательную\;
В+
будет пытаться минимизировать количество подпроцессов. Оба метода, вероятно, будут (намного или чуть) медленнее, чем те,-delete
которые вообще не используют внешние команды, а вместо этого вызывают системные вызовы.Тем не менее, всегда сначала проверяйте, соответствует ли шаблон файлам, на которые вы хотите нацелиться:
Таким образом, в этом случае вы удалили файл, который хотели сохранить, и оставили файлы, которые должны были быть удалены.
источник
Используйте следующую команду:
Это приведет к удалению файлов от 100 до 100000.
Больше информации: Сайт
источник
+
а не\;
- смотреть здесь . Или, что еще лучше, используйте-delete
команду find .[100-100000]
символов соответствует только одному символу, поэтому он может соответствовать только 0 или 1.