如何在 Linux 中复制只读文件并使用 Linux(Ubuntu 10.04)中的单个 cp 命令使副本可写?
--no-preserve 和 --preserve 似乎是不错的选择,只不过它们应该“和”模式标志,而我正在寻找的是可以“或”它们的东西(添加 +w 模式)。
更多细节:
我必须将 GIT 中的存储库导入 Perforce。我希望所有 Perforce 仓库文件都是只读的(Perforce 就是这样设计的),而从仓库文件派生/复制的所有其他文件都是可写的。目前,如果 Makefile 尝试复制只读文件,则派生文件也将是只读的。当 cp 第二次尝试覆盖只读文件时,这会导致构建错误。当然,--force 是一种解决方法,但派生文件也是只读的。另外,我不想在每个“cp”命令后都使用“chmod”——我只会在万不得已的情况下才这样做。
答案1
你应该看看安装命令。
从安装
SYNOPSIS
install [OPTION]... [-T] SOURCE DEST
install [OPTION]... SOURCE... DIRECTORY
install [OPTION]... -t DIRECTORY SOURCE...
install [OPTION]... -d DIRECTORY...
DESCRIPTION
This install program copies files (often just compiled) into
destination locations you choose. If you want to download and install
a ready-to-use package on a GNU/Linux system, you should instead be
using a package manager like yum(1) or apt-get(1).
In the first three forms, copy SOURCE to DEST or multiple SOURCE(s) to
the existing DIRECTORY, while setting permission modes and owner/group.
In the 4th form, create all components of the given DIRECTORY(ies).
...
-m, --mode=MODE
set permission mode (as in chmod), instead of rwxr-xr-x
答案2
制作一个 cp1.sh 脚本,在每个 cp 后添加一个 chmod +w?:) 唯一的区别是该脚本不是原子的,但是我认为对于任何包含的属性更改,cp 原子性没有任何保证?