2013-05-28 34 views
2

這裏的情況:我有一個目錄結構,其中的文件可能有不同內容的兩個副本,但名稱和位置相同。其中一個結構具有正確的文件權限(即可執行文件被標記爲可執行文件,不可執行文件不可執行文件),我需要將這些權限複製到另一個樹中。我怎樣才能做到這一點?如何清理文件權限的目錄結構

回答

1

鑑於(完整路徑開始與正確的權限的目錄),並目標(完整路徑啓動了需要它的權限更改目錄)

chmod -R a-x target 
find target -type d -exec chmod a+x {} \; 
chmod a+x `find source -executable -type f | grep -v "Permission denied" | sed 's/source/target/'` 
  1. 馬克一切因爲不可執行
  2. 將所有目錄標記爲可執行
  3. 查找中的每個文件來源這是可執行文件,並將它的匹配文件標記爲目標文件爲可執行文件,並清除出現問題的文件。
+0

如果你的目錄結構較大,則可能需要使用xargs的最後一行,而不是反引號(避免命令行參數的數量限制)。 – mihi

+1

這似乎不錯,但要注意,它會在病理情況下,比如當一個目錄有可執行的訪問失敗,但不讀訪問,等等......它也無法處理其他類似種類的setuid/setgit和粘滯位權限位。當然,它也忽略了非Unix元數據,比如包含selinux標籤的ext2屬性等等。這裏的一個通用解決方案將非常有趣。 –

+0

您對「權限被拒絕」的處理是錯誤的 - 您在輸入'stdout'的同時將此信息輸出到'stderr' – keltar