Estou tentando:
- Liste todos os subdiretórios em um diretório de nível superior (/ shared) e faça a saída para um arquivo chamado directory_list
- Depois, quero executar o getfacl usando o arquivo como entrada e enviar os resultados para um arquivo chamado acl_list
Então, finalmente, obter as ACLs para todos os subdiretórios em / shared.
As etapas que estou tentando usar são:
ls -d -- /shared/*/*/*/ > directory_list
getfacl < directory_list > acl_list
Existe um comando diferente que eu possa usar para (1)onde listará os subdiretórios recursivamente, como -dr (listar diretórios recursivamente) não parece funcionar. Também não sei quantos níveis de subdiretórios existem.
Quando executo o 2º comando, parece haver algum erro de sintaxe que impede sua execução, mas verifiquei a sintaxe nas páginas de manual do linux e deve estar correto.
Alguém poderá me indicar a direção correta?
obrigado
Respostas:
2 para resposta № 1Usar
find
para fazer uma lista recursiva:find /shared -type d -print > directory_list
getfacl
espera que os nomes dos arquivos sejam argumentos de linha de comando, ele não lê a entrada padrão.xargs
para executar esta tradução:xargs -d "n" getfacl < directory_list > acl_list
o -d
A opção especifica o delimitador, substituindo o uso padrão do espaço em branco. No entanto, acredito que seja uma extensão GNU, pode não estar em todas as versões do xargs
. Se você não pode usá-lo, precisará escrever um loop:
while read -r filename; do
getfacl "$filename"
done < directory_list > acl_list
0 para resposta № 2
o find
O comando deve fornecer o que você precisa:
find /shared -type d
-type d
restringe a saída apenas aos diretórios.
0 para resposta № 3
Eu sei que você realmente pediu isso, mas tecnicamente você precisa do diretório_list intermediário?
find /shared -type d -print -exec getfacl "{}" + > acl_list