[unix shell] работа с большим количеством файлов из ком. строки
частично спасёт xargs
в tar есть --include
ещё есть ls -b *.png | while read FILE ; do
Можно попробовать записать список файлов в файл и использовать awk
ещё есть ls -b *.png | while read FILE ; doесть подозрение, что * не развернется.
Я бы делал на perl цикл с readdir.
надо ls | grep
Оставить комментарий
Landstreicher
Есть каталог, в нем лежит большое количество (порядка 103 тысяч) файлов. Имена файлов имеют вид prefix_number.png, где prefix — тип файла, number — порядковый номер.Нужно выполнять с этими файлами типичные действия, например удалить, переименовать, переместить в другое место, запаковать. Подмножество файлов хорошо выделяется с помощью регэкспов, например, 'ab*.png'
Если делать стандартными утилитами — выводится ошибка:
В принципе, ошибка вполне понятна — существует ограничение на количество аргументов командной строки порядка 32768 или 65536.
Конечно, можно делать через find или xargs, например:
$ find -name 'ab*.png' -exec ls {} ';'
Но это медленно, так как на каждый файл делается fork + exec + масса других ненужных действий вроде инициализации /bin/ls.
Как сделать так, чтобы избежать этих накладных расходов?
Интересует, в первую очередь, что рекомендует делать в таких случаях true unix way.