Есть ли способ ограничить глубину рекурсивного списка файлов в 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
EDIT:
Окончательный выбор команды:
find -maxdepth 2 -type d -ls >dirlist
Оформить флажок -maxdepth
find
find . -maxdepth 1 -type d -exec ls -ld "{}" \;
Здесь я использовал 1 как максимальную глубину уровня, -type d
означает найти только каталоги, которые затем ls -ld
перечисляют содержимое в длинном формате.
-d
к ls
.
find
чтобы решить его главную проблему. В любом случае спасибо, я добавляю это.
find
Фактически нет exec /bin/ls
;
Найти имеет параметр, который делает именно это:
find . -maxdepth 2 -type d -ls
Чтобы увидеть только один уровень интересующих вас подкаталогов, добавьте -mindepth
на тот же уровень, что и -maxdepth
:
find . -mindepth 2 -maxdepth 2 -type d -ls
Когда отображаемые детали должны отличаться, -printf
может показывать любую информацию о файле в настраиваемом формате;
Чтобы показать символические разрешения и имя владельца файла, используйте -printf
с %M
и %u
в format
.
Я заметил позже, что вам нужна полная информация о владельце, которая включает
группа. Используйте %g
в формате символического имени или %g
для идентификатора группы (например, также %u
для числового идентификатора пользователя)
find . -mindepth 2 -maxdepth 2 -type d -printf '%M %u %g %p\n'
Это должно дать вам только то, что вам нужно, только для правильных файлов.
Я приведу пример, который показывает фактически разные значения для пользователя и группы:
$ sudo find /tmp -mindepth 2 -maxdepth 2 -type d -printf '%M %u %g %p\n'
drwx------ www-data www-data /tmp/user/33
drwx------ octopussy root /tmp/user/126
drwx------ root root /tmp/user/0
drwx------ siegel root /tmp/user/1000
drwxrwxrwt root root /tmp/systemd-[...].service-HRUQmm/tmp
(Отредактировано для удобства чтения: с отступом, сокращенная последняя строка)
Хотя время выполнения в большинстве случаев не имеет значения для этой команды, увеличение производительности достаточно велика, чтобы сделать это достойным внимания:
Мы сохраняем не только создание нового процесса для каждого имени - огромная задача -
информацию даже не нужно читать, поскольку find
уже знает ее.
tree -L 2 -u -g -p -d
Печатает дерево каталогов в симпатичном формате до глубины 2 (-L 2). Распечатайте пользователя (-u) и группу (-g) и разрешения (-p). Печатать только каталоги (-d). В дереве есть много других полезных опций.
tree -L 2 xxx/
или tree -L 2 -d xxx/
.
ls -la /var/www/vhosts/*
?