我正在嘗試獲取 2 個目錄中所有文件的文件所有權和權限並進行比較。具有相同名稱但不同文件所有權或權限的報告文件。我已將第一個目錄中所有檔案的檔案擁有權和權限提取到 file1.txt 並將第二個目錄中的所有檔案提取到 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)
我在處理這兩種情況時面臨挑戰:
- 如果 dir1 或 dir2 中檔案遺失,則應進行處理。考慮 dir1 中的文件是正確的文件,而 dir2 中的文件的權限/所有權混亂。我只想比較 dir1 和 dir2 中具有相同名稱但所有權/權限不同的檔案。
答案1
試運行以識別差異
這個命令列rsync
對我來說適用於類似的目錄樹,
rsync -Havvn --existing source/ target | grep -v uptodate$'
行動
n
刪除獲取操作的選項。
您必須調整命令列以符合您的情況下的主目錄(可能透過 ssh 使用遠端路徑)。有兩個 v 可以增加詳細程度並獲得僅可執行標誌不同的輸出;當採取行動時,它會修復它而沒有詳細標誌。