Перейти к содержанию

Как в Linux получить список файлов с полным путем, со всеми поддиректориями

Получение списка файлов через команду ls

В ls предусмотрены опция вывода полного пути к файлу и опция рекурсивного обхода поддиректорий. Но толку от них нет никакого: получить простой список файлов с полным путем и со всех подкаталогов все равно не удасться.

Наиболее правильное решение такой задачки является составным. Для получения списка файлов нужно всего лишь преобразовать выхлоп утилиты ls через редактор командной строки awk. Вот готовая команда:

ls -R $PWD | awk '
/:$/&&f{s=$0;f=0}
/:$/&&!f{sub(/:$/,"");s=$0;f=1;next}
NF&&f{ print s"/"$0 }'
Опытные пользователи скажут: тебе сложно набрать всего четыре строки? Сделай алиас на эту команду!

Получение списка файлов через команду find

Для получения списка файлов мы можем использовать не специально созданную для этого команду ls, а команду поиска файлов find.

find $PWD -type f
Вот и все! Но если посмотреть на полученный список файлов, можно обнаружить, что файлики-то идут в разнобой, без всякого упорядочевания. Вот какие первые inode попали под искомые параметры, в такой последовательности и будут выведены файлы. Да, список файлов будет полным. Но не упорядоченным.

Добавляй команду sort и получай упорядоченность

find $PWD -type f | sort
Но если посмотреть на результат работы этой команды, то можно увидеть следующую вещь:

data/aaafile.bin
data/bbbfile.bin
data/cccdir/dddfile.bin
data/eeefile.bin
data/ffffile.bin

Cписок-то все равно неоднородный. В этом списке все так же файлы из одной директории перемешаны с файлами из поддиректорий. Если нам нужен правильный отсортированный список, лучше воспользоваться командой ls описанной выше.