Permissions

如何一步複製文件和更改目標文件權限?

  • November 3, 2020

我正在編寫一個 shell 腳本來完成一些複雜的任務,這些任務本質上是重複的。為了簡化問題陳述,我複雜任務的最後一步是將文件從特定路徑(基於某些複雜步驟找到)複製到預定義的目標路徑。並且被複製的文件將具有 600 的權限。我希望將其更改為 644。

我正在尋找一個選項,我可以在其中指示系統複製該文件並在一個命令中全部更改權限。就像是 - cp -<some_flag> 644 <source_path> <destination_path>

您可能會說,我可以通過兩步過程複製文件後更改文件的權限。但是,這也有問題。原因是,源路徑是作為另一個命令的輸出獲得的。所以我得到了文件的絕對路徑,而不僅僅是文件名來編寫我的腳本以chmod使用名稱呼叫。

我的命令最後一段看起來像 - ...| xargs -I {} cp {} /my/destination/path/

chmod所以我不知道複製後要呼叫的文件的名稱

只需chmod在您的xargs通話中包含:

...|  xargs sh -c 'for file; do 
                     cp -- "$file" /my/destination/path/ && 
                       chmod 700 /my/destination/path/"$file"; 
                   done' sh

有關使用的特定格式的更多資訊,請參閱https://unix.stackexchange.com/a/156010/22222

請注意,如果您的輸入xargs是完整路徑而不是本地目錄中的文件名,您將需要使用${file##*/}僅獲取文件名:

...|  xargs sh -c 'for file; do 
                 cp -- "$file" /my/destination/path/ && 
                   chmod 700 /my/destination/path/"${file##*/}"; 
               done' sh

引用自:https://unix.stackexchange.com/questions/617808