2015-03-12 2 views
0

Я пытаюсь:Linux - список всех подкаталогов и получить ACL

  1. Список всех поддиректорий в директории верхнего уровня (/ Shared) и выход этого в файл с именем directory_list
  2. Затем я хочу запустите getfacl, используя файл в качестве входных данных, и выведите результаты в файл с именем acl_list

Итак, в конечном итоге получим списки ACL для всех подкаталогов в/shared.

шаги я пытаюсь использовать это:

  1. ls -d -- /shared/*/*/*/ > directory_list
  2. getfacl <directory_list> acl_list

Есть другая команда, которую я могу использовать для (1), где он будет список подкаталогов рекурсивно , поскольку -dr (списки каталогов рекурсивно), похоже, не работает. Также я не знаю, сколько уровней подкаталогов есть.

Когда я запускаю вторую команду, кажется, есть некоторая синтаксическая ошибка, препятствующая ее запуску, но я проверил синтаксис с man-страниц linux, и это должно быть правильно.

Может ли кто-нибудь указать мне в правильном направлении?

Благодаря

+0

'getfacl' ожидает, что имена будут аргументами, они не получат их от stdin. Вы можете использовать 'xargs' для преобразования stdin в аргументы. – Barmar

ответ

2
  1. Использование find сделать рекурсивный список:

    find /shared -type d -print > directory_list 
    
  2. getfacl ожидает, что имена файлов будут аргументы командной строки, он не читает стандартный ввод. Используйте xargs выполнить этот перевод:

    xargs -d '\n' getfacl <directory_list> acl_list 
    

Опция -d задает разделитель, отменяя использование по умолчанию пробелов. Тем не менее, я считаю, что это расширение GNU, оно может быть не во всех версиях xargs. Если вы не можете использовать его, вам придется написать цикл:

while read -r filename; do 
    getfacl "$filename" 
done <directory_list> acl_list 
+0

Спасибо - это работает, за исключением того, что «xargs getfacl» не может обрабатывать пробелы в именах каталогов.Вы знаете, как это можно исправить? – kurotsuki

+0

Добавлена ​​опция '-d'. – Barmar

+0

Спасибо, все работает! – kurotsuki

0

Команда find вы должны получить то, что вам нужно:

find /shared -type d 

-type d ограничивает выход только каталогов.

+1

Я не думаю, что '-ls' обычно показывает ACL, он просто показывает традиционные режимы разрешений. – Barmar

+0

Согласовано, втянуто, –

0

Я знаю, что вы на самом деле просили об этом, но вы технически говоря ПОТРЕБНОСТЬ промежуточный directory_list?

find /shared -type d -print -exec getfacl "{}" \+ > acl_list 
Смежные вопросы