Я намагаюся:
- Перерахуйте всі підкаталоги в каталозі верхнього рівня (/ спільно) та виведіть його у файл, який називається каталог_list
- Після цього я хочу запустити getfacl, використовуючи файл як вхідний файл, і вивести результати у файл під назвою acl_list
Отже, в кінцевому рахунку, отримання ACL для всіх підкаталогів в / спільно.
Кроки, які я намагаюся використовувати:
ls -d -- /shared/*/*/*/ > directory_list
getfacl < directory_list > acl_list
Чи є інша команда, яку я можу використовувати для (1)де він буде реєструвати підкаталоги рекурсивно, як -dr (список каталогів рекурсивно), схоже, не працює. Також я не знаю, скільки існує рівнів підкаталогів.
Коли я запускаю 2-ю команду, здається, якась синтаксична помилка перешкоджає її запуску, але я "перевірив синтаксис зі сторінок man linux, і він повинен бути правильним.
Чи може хто-небудь вказати мені в правильному напрямку?
Дякую
Відповіді:
2 для відповіді № 1Використовуйте
find
зробити рекурсивний список:find /shared -type d -print > directory_list
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