bash で 2 つのディレクトリ内のすべてのファイルの所有権と権限を比較する

bash で 2 つのディレクトリ内のすべてのファイルの所有権と権限を比較する

2 つのディレクトリにあるすべてのファイルのファイル所有権と権限を取得して比較しようとしています。同じ名前だがファイル所有権または権限が異なるファイルを報告します。最初のディレクトリにあるすべてのファイルのファイル所有権と権限を file1.txt に、2 番目のディレクトリにあるすべてのファイルのファイル所有権と権限を file2.txt に取得しました。

私のスクリプトの進捗状況:

[root@test]# cat file1.txt
644 root root /home/user2/sample-test/abc
644 root root /home/user2/sample-test/bcd
644 root root /home/user2/sample-test/efg
644 root root /home/user2/sample-test/mama
644 root root /home/user2/sample-test/ngins2
644 root root /home/user2/sample-test/nils45
644 root root /home/user2/sample-test/sample2
644 root root /home/user2/sample-test/t1
644 root root /home/user2/sample-test/t2
644 root root /home/user2/sample-test/test1
755 root root /home/user2/sample-test
644 root root /home/user2/sample-test1/abc
644 root root /home/user2/sample-test1/ppp
644 root root /home/user2/sample-test1/werwre
755 root root /home/user2/sample-test1
644 root root /home/user2/testing123

[root@test]# cat file2.txt
644 root root /home/user2/sample-test/ip
644 root root /home/user2/sample-test/new-file
644 root root /home/user2/sample-test/ngins2
644 root root /home/user2/sample-test/nils45
644 root root /home/user2/sample-test/sample2
755 root root /home/user2/sample-test
755 root root /home/user2/sample-test/test1.sh
644 apache apache /home/user2/sample-test1/ppp
644 apache fes /home/user2/sample-test1/abc
644 root root /home/user2/sample-test1/perms.saved
644 root root /home/user2/sample-test1/test
644 root root /home/user2/sample-test1/test1
644 root root /home/user2/sample-test1/werwre
755 root root /home/user2/sample-test1
755 root root /home/user2/sample-test1/1.sh
644 root root /home/user2/testing123


find /path/to/dir1 -depth -exec stat --format '%a %U %G %n' {} + | sort -n" >> file1.txt
find /path/to/dir2 -depth -exec stat --format '%a %U %G %n' {} + | sort -n" >> file2.txt

t1=`cat file1.txt`
t5=`cat file2.txt`

#find lines only in file1
only1=$(comm -23 "$t1"_sorted "$t5"_sorted)

#find lines only in file2
only2=$(comm -13 "$t1"_sorted "$t5"_sorted)

私は次の 2 つの状況に対処する際に課題に直面しています。

  1. dir1 または dir2 にファイルが見つからない場合、それを処理する必要があります。 dir1 のファイルは正しいファイルであり、dir2 のファイルはアクセス許可/所有権が間違っていると考えます。 dir1 と dir2 で同じ名前を持ち、所有権/アクセス許可が異なるファイルを比較したいだけです。

答え1

違いを特定するためのリハーサル

このコマンドラインは、rsync同様のディレクトリツリーで動作します。

rsync -Havvn --existing source/ target | grep -v uptodate$'

アクション

アクションを取得するオプションを削除しますn


あなたの場合、メイン ディレクトリと一致するようにコマンド ラインを微調整する必要があります (おそらく ssh 経由のリモート パスを使用)。詳細度を高め、実行可能フラグのみが異なる出力を取得するには、2 つの v があります。アクションを実行すると、詳細度フラグなしで修正されます。

関連情報