В Ubuntu у меня есть папка, которая содержит много (~ 10M) .txt файлов (около 1-2 КБ каждый). Папка сама по себе небольшая (около 400 МБ) и не содержит вложенных папок, только файлы .txt. Я должен перечислить это и не преуспеть в этом. (Я могу посчитать количество файлов, однако, с помощью wc -l) вопрос: есть ли способ разделить папку так или иначе, без вызова методов, которые использует ls ?

1 ответ1

0

Вы должны быть в состоянии использовать 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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .