/ / Linux - перерахуйте всі підкаталоги та отримайте ACL - linux, acl, ls

Linux - перелічити всі підкаталоги і отримати ACL - linux, acl, ls

Я намагаюся:

  1. Перерахуйте всі підкаталоги в каталозі верхнього рівня (/ спільно) та виведіть його у файл, який називається каталог_list
  2. Після цього я хочу запустити getfacl, використовуючи файл як вхідний файл, і вивести результати у файл під назвою acl_list

Отже, в кінцевому рахунку, отримання ACL для всіх підкаталогів в / спільно.

Кроки, які я намагаюся використовувати:

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

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

Коли я запускаю 2-ю команду, здається, якась синтаксична помилка перешкоджає її запуску, але я "перевірив синтаксис зі сторінок man linux, і він повинен бути правильним.

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

Дякую

Відповіді:

2 для відповіді № 1
  1. Використовуйте find зробити рекурсивний список:

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

    xargs -d "n" getfacl < directory_list > acl_list
    

The -d опція вказує роздільник, що переосмислює використання пробілу за замовчуванням. Однак я вважаю, що це розширення GNU, можливо, це не у всіх версіях xargs. Якщо ви не можете його використовувати, вам доведеться написати цикл:

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

0 для відповіді № 2

The find команда повинна отримати вам те, що вам потрібно:

find /shared -type d

-type d обмежує вихід тільки на каталоги.


0 для відповіді № 3

Я знаю, що ви насправді цього просили, але чи технічно ви говорите НЕОБХІДНО проміжний каталог_лістів?

find /shared -type d -print -exec getfacl "{}" + > acl_list