Есть ли способ ограничить глубину рекурсивного списка файлов в Linux?
Команда, которую я использую в данный момент:
ls -laR > dirlist.txt
Но у меня есть около 200 каталогов, и у каждого из них по 10 каталогов. Так что это займет слишком много времени и потребует слишком много системных ресурсов.
Все, что меня действительно интересует, это информация о владельцах и разрешениях для подкаталогов первого уровня:
drwxr-xr-x 14 root root 1234 Dec 22 13:19 /var/www/vhosts/domain1.co.uk
drwxr--r-- 14 jon root 1234 Dec 22 13:19 /var/www/vhosts/domain1.co.uk/htdocs
drwxr--r-- 14 jon root 1234 Dec 22 13:19 /var/www/vhosts/domain1.co.uk/cgi-bin
drwxr-xr-x 14 root root 1234 Dec 22 13:19 /var/www/vhosts/domain2.co.uk
drwxr-xrwx 14 proftp root 1234 Dec 22 13:19 /var/www/vhosts/domain2.co.uk/htdocs
drwxr-xrwx 14 proftp root 1234 Dec 22 13:19 /var/www/vhosts/domain2.co.uk/cgi-bin
drwxr-xr-x 14 root root 1234 Dec 22 13:19 /var/www/vhosts/domain3.co.uk
drwxr-xr-- 14 jon root 1234 Dec 22 13:19 /var/www/vhosts/domain3.co.uk/htdocs
drwxr-xr-- 14 jon root 1234 Dec 22 13:19 /var/www/vhosts/domain3.co.uk/cgi-bin
drwxr-xr-x 14 root root 1234 Dec 22 13:19 /var/www/vhosts/domain4.co.uk
drwxr-xr-- 14 jon root 1234 Dec 22 13:19 /var/www/vhosts/domain4.co.uk/htdocs
drwxr-xr-- 14 jon root 1234 Dec 22 13:19 /var/www/vhosts/domain4.co.uk/cgi-bin
РЕДАКТИРОВАТЬ:
Окончательный выбор команды:
find -maxdepth 2 -type d -ls >dirlist
ls -la /var/www/vhosts/*
?Ответы:
Оформить
-maxdepth
флагfind
Здесь я использовал 1 как максимальную глубину уровня, то
-type d
есть найти только каталоги, которые затемls -ld
перечисляют содержимое в длинном формате.источник
-d
опцию вls
.find
часть, чтобы решить его главную проблему. В любом случае спасибо, я добавляю это.-print0
иxargs -0
много. Пример:find . -maxdepth 1 -type d -print0 | xargs -0 ls -d
Используйте
find
опции 's'На самом деле нет никакого
/bin/ls
необходимого;Find имеет опцию, которая делает именно это:
Чтобы увидеть только один уровень подкаталогов, которые вас интересуют, добавьте
-mindepth
к тому же уровню, что и-maxdepth
:Использовать форматирование вывода
Когда детали, которые отображаются, должны отличаться,
-printf
могут отображаться любые подробности о файле в произвольном формате; Чтобы показать символические разрешения и имя владельца файла, используйте-printf
с%M
и%u
вformat
.Позже я заметил, что вы хотите полную информацию о владельце, которая включает в себя группу. Используйте
%g
в формате для символического имени или%G
для идентификатора группы (как также%U
для числового идентификатора пользователя)Это должно дать вам только те детали, которые вам нужны, только для правильных файлов.
Я приведу пример, который показывает фактически разные значения для пользователя и группы:
(Отредактировано для удобства чтения: отступ, сокращение последней строки)
Примечания по производительности
Хотя время выполнения для команды такого рода в основном не имеет значения, прирост производительности здесь достаточно велик, чтобы на него стоило указать:
Мало того, что мы сохраняем создание нового процесса для каждого имени - огромная задача - информацию даже не нужно читать, как она
find
уже знает.источник
tree -L 2 -u -g -p -d
Печатает дерево каталогов в хорошем формате до глубины 2 (-L 2). Печать пользователя (-u) и группы (-g) и прав доступа (-p). Печатать только каталоги (-d). У дерева есть много других полезных опций.
источник
tree -L 2 xxx/
илиtree -L 2 -d xxx/
достаточно для какого-то случая.Во время игры на рыбе я нашел простое решение, которое идеально соответствует вашим потребностям.
или
источник