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 に答える