У меня есть файлы fileName_1, fileName_2... fileName_100000, где имена файлов пронумерованы последовательно. Как я могу удалить файлы индекса, больше, чем, сказать 100?
Если имена файлов пронумерованы, последовательно просто выполняет следующую команду:
rm fileName_{100..100000}
Можно попробовать эту команду также,
for i in $(seq 100 100000); do rm fileName_$i; done
Она удалит все файлы (диапазоны от 100 до 100 000), если имя файла будет содержать числа в последовательном порядке.
В целом у Вас есть несколько способов достигнуть этого:
rm fileName_{100..100000}
будет расширен оболочкой примерно в 100 000 имен файлов. Если базовое имя является длинным трактом, и число достаточно высоко, Вы могли бы на самом деле превысить максимальную длину командной строки с этим подходом.
for
цикл
for i in $(seq 100 100000); do rm fileName_$i; done
не страдает от этой проблемы, но относительно медленный способ удалить файлы, поскольку оболочка должна выполнить подстановку переменных и запускающуюся комнату приблизительно 100 000 раз.
Оба метода выше могли бы вызвать предупреждения, если некоторые файлы, говорят filename_101
отсутствовали.
Обычно, решения на основе find
лучше, поскольку они только работают над файлами, которые являются на самом деле там (во время исследования). Однако существуют некоторые тонкие различия:
find . -name 'fileName_[100-100000]' -exec rm {} \;
все еще запустится rm
программа приблизительно 100 000 раз, при замене финала \;
+
попытается минимизировать количество подпроцессов. Оба метода, вероятно, будут (очень или немного) медленнее, чем использование -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 до 100 000.
Больше информации: Сайт