1

我将此命令存储在此变量中:

filelist=$(find $dir_name -size $sizeFileTmp -printf '%M %n %u %g %-s %Tb %Td %Tk:%TM %P\n')
echo "$filelist" | sort -rnk5 | awk '{printf "%s %s %s %s %6s %3s %2s %5s %s\n", $1, $2, $3, $4, $5, $6, $7, $8, $9}'

产生这个输出:

-rwx------ 1 juanpa juanpa 135838 Nov 04 20:47 sample.dir2/testdir2/subdir2/phones
-rwx------ 1 juanpa juanpa 135838 Nov 04 20:47 sample.dir2/testdir2/phones
-rwx------ 1 juanpa juanpa 135838 Nov 04 20:47 sample.dir1/testdir1/subdir1/phones
-rwx------ 1 juanpa juanpa 135838 Nov 04 20:47 sample.dir1/testdir1/phones
-rwx------ 1 juanpa juanpa 135838 Nov 04 20:47 sample.dir1/.phones
-rwx------ 1 juanpa juanpa  26615 Nov 04 20:47 sample.dir2/vimtutor
-rwx------ 1 juanpa juanpa  26615 Nov 04 20:47 sample.dir2/testdir2/vimtutor
-rwx------ 1 juanpa juanpa  26615 Nov 04 20:47 sample.dir2/testdir2/subdir2/vimtutor
-rwx------ 1 juanpa juanpa  26615 Nov 04 20:47 sample.dir1/vimtutor
-rwx------ 1 juanpa juanpa  26615 Nov 04 20:47 sample.dir1/testdir1/vimtutor
-rwx------ 1 juanpa juanpa  26615 Nov 04 20:47 sample.dir1/testdir1/subdir1/vimtutor
-rwx------ 1 juanpa juanpa  25557 Nov 04 20:47 sample.dir2/testdir2/subdir2/cdlist
-rwx------ 1 juanpa juanpa  25557 Nov 04 20:47 sample.dir2/testdir2/cdlist
-rwx------ 1 juanpa juanpa  25557 Nov 04 20:47 sample.dir2/cdlist
-rwx------ 1 juanpa juanpa  25557 Nov 04 20:47 sample.dir1/testdir1/subdir1/cdlist
-rwx------ 1 juanpa juanpa  25557 Nov 04 20:47 sample.dir1/testdir1/cdlist
-rwx------ 1 juanpa juanpa  25557 Nov 04 20:47 sample.dir1/cdlist
-rwx------ 1 juanpa juanpa  20558 Nov 04 20:47 sample.dir2/testdir2/subdir2/sample.txt
-rwx------ 1 juanpa juanpa  20558 Nov 04 20:47 sample.dir2/testdir2/sample.txt
-rwx------ 1 juanpa juanpa  20558 Nov 04 20:47 sample.dir2/sample.txt
-rwx------ 1 juanpa juanpa  20558 Nov 04 20:47 sample.dir1/testdir1/subdir1/sample.txt
-rwx------ 1 juanpa juanpa  20558 Nov 04 20:47 sample.dir1/testdir1/sample.txt
-rwx------ 1 juanpa juanpa  20558 Nov 04 20:47 sample.dir1/sample.txt

我的问题是我应该如何检查包含这些文件的文件夹是否没有写入和执行权限,然后突出显示这些行????

提前致谢

4

1 回答 1

1

以下命令可以识别 $dir 下没有读/写权限的目录,但不会将报告限制为可能已被-size用于生成列表的谓词排除的文件夹:

find $dir -type d ! \( -readable -a -writable \) -printf '%p\n'

以下内容似乎相当复杂,但它前面加上了“!” “突出显示”没有用户可读/可写目录的项目(尽管有人可能会问,如果文件夹的读取权限不存在,如何获得文件列表)。

filelist=$(find $dir_name -size $sizeFileTmp -printf '%M %n %u %g %-s %Tb %Td %Tk:%TM %P\n')
if [ -z "${filelist}" ];
then
  echo "No files."
else
  echo "$filelist" | \
  sort -rnk5 | \
  awk \
    '{ DIR = gensub(/[/][^/]*$/, "", "", $9);
       CMD = "stat -c +%A " DIR;
       CMD | getline PERMS;
       if (PERMS !~ /^..rw/)
       {
         printf("!");
       }
       printf("%s %s %s %s %6s %3s %2s %5s %s\n", \
         $1, $2, $3, $4, $5, $6, $7, $8, $9);
    }' -
fi

这不会检查目录的每一级,而只检查叶子文件夹。

感谢 F. Hauri 提出使用stat.

于 2012-11-08T22:21:25.677 回答