【问题标题】:Linux - list all subdirectories and get ACLLinux - 列出所有子目录并获取 ACL
【发布时间】:2015-03-12 00:53:06
【问题描述】:

我正在尝试:

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

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

我尝试使用的步骤是:

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

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

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

谁能指出我正确的方向?

谢谢

【问题讨论】:

  • getfacl 期望名称是参数,它不会从标准输入中获取它们。您可以使用xargs 将标准输入转换为参数。

标签: linux acl ls


【解决方案1】:
  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

【讨论】:

  • 谢谢 - 除了“xargs getfacl”不能处理目录名称中的空格之外,它可以工作。你知道如何解决这个问题吗?
  • 添加了-d 选项。
【解决方案2】:

我知道您实际上要求这样做,但从技术上讲,您是否需要中间目录列表?

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

【讨论】:

  • 感谢这个完美,让我选择从根目录获取所有内容:-)
【解决方案3】:

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

find /shared -type d

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

【讨论】:

  • 我认为-ls 通常不会显示 ACL,它只是显示传统的权限模式。
猜你喜欢
  • 2012-02-26
  • 2010-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-11
  • 2011-11-09
  • 1970-01-01
相关资源
最近更新 更多