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

У меня есть файлы fileName_1, fileName_2... fileName_100000, где имена файлов пронумерованы последовательно. Как я могу удалить файлы индекса, больше, чем, сказать 100?

8
задан 15 May 2014 в 21:44

4 ответа

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

rm fileName_{100..100000}
17
ответ дан 16 November 2019 в 16:43

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

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

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

6
ответ дан 16 November 2019 в 16:43

В целом у Вас есть несколько способов достигнуть этого:

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

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

5
ответ дан 16 November 2019 в 16:43

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

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

Это удалит файлы от 100 до 100 000.

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

4
ответ дан 16 November 2019 в 16:43

Другие вопросы по тегам:

Похожие вопросы: