Linux - 列出所有子目录并获取 ACL

Linux - list all subdirectories and get ACL

我正在尝试:

  1. 列出顶级目录 (/shared) 下的所有子目录并将其输出到名为 directory_list
  2. 的文件中
  3. 之后我想 运行 getfacl 使用该文件作为输入,并将结果输出到一个名为 acl_list
  4. 的文件中

所以最终,获取 /shared 中所有子目录的 ACL。

我尝试使用的步骤是:

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

是否有一个不同的命令我可以用于 (1),它将递归地列出子目录,因为 -dr(递归地列出目录)似乎不起作用。也不知道有多少级子目录。

当我 运行 第二个命令时,似乎有一些语法错误阻止它 运行ning,但我已经检查了 linux 手册页中的语法并且应该是对的

谁能给我指出正确的方向?

谢谢

find 命令应该可以满足您的需求:

find /shared -type d

-type d 将输出限制为仅目录。

  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

我知道你确实要求这个,但从技术上讲你需要中间 directory_list 吗?

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