Проблемный список папок с большим количеством файлов
В Ubuntu у меня есть папка, которая содержит много (~10M) .txt файлов (около 1-2 КБ каждый). Папка сама по себе небольшая (около 400 МБ) и не содержит вложенных папок, только файлы.txt. Я должен перечислить это и не преуспеть в этом. (Я могу посчитать количество файлов, хотя, с wc -l
) вопрос: есть ли способ разделить папку так или иначе, без вызова методов, которые ls
использует?
1 ответ
Вы должны быть в состоянии использовать find
перечислить файлы:
find .
С помощью *
или что-то подобное в качестве аргумента команды обязательно приведет к ошибке "Список аргументов слишком длинный", но он может работать в цикле оболочки, как предложено выше Эндрю Стаббсом.
Если это не так, вы можете накормить find
вывод сверху на while
цикл, чтобы вы могли обрабатывать отдельные файлы:
find . | while read filename; do
dosomething $name
done
с соответствующими значениями "dosomething".
Чтобы "разделить" папку, вы можете переместить файлы, например, в подкаталоги на основе их имени, например, так:
mkdir _a _b _c _d _e _f _g _h _i _j _k _l _m _n _o _p _q _r _s _t _u _v _w _x _y
find . | while read filename; do
case $filename in
a*) mv $filename _a;;
b*) mv $filename _b;;
[...]
z*) mv $filename _z;;
esac
done
Конечно, возможны более сложные схемы.