Проблемный список папок с большим количеством файлов

В 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

Конечно, возможны более сложные схемы.

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