在OSX上,如何将受限制的系统目录的文件名放入数组中?

时间:2017-09-07 13:41:06

标签: bash macos ls

当我进入终端时

files=(/var/db/*); printf '%s\n' "${files[@]}"

并运行它,我得到该文件夹​​中的文件列表,但进入受限制的TokenCache目录并没有提供任何内容:

files=(/var/db/TokenCache/*); printf '%s\n' "${files[@]}"

此命令返回/ var / db / TokenCache / *而不是文件/文件夹。有没有办法让它在受限制的文件夹中工作,因为 sudo ls 甚至 sudo rm 在里面工作?例如:

sudo ls -la /var/db/TokenCache

显示其内容,即两个文件夹配置令牌

2 个答案:

答案 0 :(得分:0)

答案可能是这样的:

files=($(sudo ls "/var/db/TokenCache"))
printf '%s\n' "${files[@]}"

但这只是在假设的情况下才安全,指定的文件夹(在本例中为TokenCache)只包含名称中没有任何空格的元素。

如果你想从每个文件的数组中获取完整路径,我建议这样:

directory="/var/db/TokenCache"
files=($(sudo ls "${directory}"))
printf "${directory}/%s\n" "${files[@]}"

请注意,'printf调用的格式说明符中更改为。这需要shell进行变量扩展。

答案 1 :(得分:0)

全局扩展发生在shell中,因此您需要一个以具有正确权限的用户身份运行的shell实例。

sudo bash -c 'files=(/var/db/*); printf "%s\n" "${files[@]}"'