我需要检查目录/usr
、/tmp
及其/var
子目录的内容的文件权限。我已分别为每个/usr
、/tmp
和获取了数组中的目录及其子目录文件的文件权限/var
:
fun() {
set -A PR_Uperm -- "/usr" `ls -lRt /bin|grep -v "total"|sed -e '1d' -e '/^$/d' -e '/^l/d'|awk '{print $1}'`
set -A PR_Tperm -- "/tmp" `ls -lRt /bin|grep -v "total"|sed -e '1d' -e '/^$/d' -e '/^l/d'|awk '{print $1}'`
fun2
}
最后,我希望这些单独的数组位于不同函数中的单个数组中,因为我们在脚本中具有动态作用域。我尝试过如下:
fun2(){
set -A perm ${PR_Uperm[@]} ${PR_Tperm[@]}
}
当我执行脚本时,我收到此错误。
script.sh:79919: 下标超出范围
当我只给一个数组时烫发数组如下,我没有收到错误。
set -A perm ${PR_Tperm[@]}
我有很多条目要存储烫发大批。如何动态增加数组的大小?组-A与 bash 无关,但这种动态增加对于 bash 和 ksh 可能是相同的,所以我将其包含在内。
我尝试存储在临时文件中,如下所示:
printf "/usr\n`ls -lRt /usr|grep -v "total"|sed -e '1d' -e '/^$/d' -e '/^l/d'|awk '{print $1}'`\n" >> /tmp/output2.txt # not working in ksh, but working when I run as bash
ksh: no space
ls -lRt /usr|grep -v "total"|sed -e '1d' -e '/^$/d' -e '/^l/d'|awk '{print $1}' >> /tmp/output2.txt # it is working
为什么第一个命令在 bash 中成功运行,但在 ksh 中运行成功?
答案1
如果我没记错的话,Bash 对数组大小没有内置限制。 KornShell93 在最近的版本中支持最多约 64k 的索引(在旧版本中最多支持 4095)。
有一个名为的实用程序mtree
,用于将文件层次结构与规范进行比较。报告任何与规范的偏差(丢失文件或目录,或所有权/权限差异)并进行选择性纠正(如果可能)。
由于我不知道您使用的是什么 Unix,因此我无法进一步指示您在哪里可以找到该实用程序。在里面OpenBSD的基础系统,但显然也是适用于 Linux。