如何一步复制文件并更改目标文件权限?

如何一步复制文件并更改目标文件权限?

我正在编写一个 shell 脚本来执行一些本质上是重复的复杂任务。为了简化问题陈述,我的复杂任务的最后一步是将文件从特定路径(基于某些复杂步骤找到)复制到预定义的目标路径。复制的文件的权限为 600。我希望将其更改为 644。

我正在寻找一个选项,我可以在其中指示系统复制该文件并通过一个命令更改权限。就像是 - cp -<some_flag> 644 <source_path> <destination_path>

您可能会说,一旦通过两步过程复制文件,我就可以更改文件的权限。然而,这也存在问题。原因是,源路径是作为另一个命令的输出获得的。因此,我获得了文件的绝对路径,而不仅仅是文件名来编写脚本以chmod使用名称进行调用。

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

chmod所以我不知道复制后调用的文件名

答案1

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

相关内容