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

时间:2015-03-12 00:53:06

标签: linux acl ls

我想:

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

    我尝试使用的步骤是:

    1. ls -d -- /shared/*/*/*/ > directory_list
    2. getfacl < directory_list > acl_list
    3. 是否有一个不同的命令我可以用于(1)它将递归列出子目录,因为-dr(递归列表目录)似乎不起作用。此外,我不知道有多少级别的子目录。

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

      有人能指出我正确的方向吗?

      由于

3 个答案:

答案 0 :(得分:2)

  1. 使用find执行递归列表:

    find /shared -type d -print > directory_list
    
  2. getfacl期望文件名是命令行参数,它不会读取标准输入。使用xargs执行此转换:

    xargs -d '\n' getfacl < directory_list > acl_list
    
  3. -d选项指定分隔符,覆盖空格的默认使用。但是,我相信这是一个GNU扩展,它可能不在xargs的所有版本中。如果你不能使用它,你就必须写一个循环:

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

find /shared -type d

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