使用 `cp -f -R` 的复制命令奇怪地不适用于所有 OS X 机器
Copy command with `cp -f -R` strangely does not work on all OS X machines
我在 OS X El Capitan。我有 2 个目录 SourceDir
& DestDir
,结构如下。
ParentDir/SourceDir |-s_dir1/ss_dir1
|-s_dir2
ParentDir/DestDir |-s_dir1/ss_dir2
|-ddir1
|-ddir2
|-ddir3
我想执行复制命令,使 ParentDir/SourceDir
中的 s_dir1
与 ParentDir/DestDir
中的 s_dir1
合并,此外,s_dir2
被放入 ParentDir/DestDir
。所以,复制后 ParentDir/DestDir
应该是这样的:
ParentDir/DestDir |-s_dir1/ss_dir1
|-s_dir1/ss_dir2
|-s_dir2
|-ddir1
|-ddir2
|-ddir3
我使用以下命令复制:
cp -f -R ParentDir/SourceDir/ ParentDir/DestDir/
在 MacOSSierra 上一切正常。但奇怪的是,它在装有 MacOS El Capitan 的 OS X 机器上不起作用。我再次在我同事的机器上用 MacOS El Capitan 试了一下。它工作正常!
怎么了?
不同版本的 MacOS El Capitan 与 cp command
的行为是否不同?
或者,我是否需要更改 El Capitan 上的复制命令语法?
如何在我的 MacOS El Capitan 机器上执行复制命令以确保至少在所有 OSX台机器?
请不要建议将 El Capitan 机器升级到 Sierra。这不是我的选择。因此发布了这个问题以获得 copy command
.
的一些其他语法选项
标准 cp
命令似乎被其他东西覆盖了。您可以通过显式指定 /bin/cp
强制它使用标准 cp
命令。您也可以尝试使用别名之类的东西来覆盖当前覆盖,但最好找出当前覆盖是什么,它来自哪里,然后(也许)摆脱它。
要做的第一件事是 运行 type cp
它的输出告诉你 cp
当前正在做什么:
- 如果它打印类似 "cp is /usr/local/bin/cp" 的内容,那么您已经安装了自定义安装的
cp
版本,它覆盖了标准版本...并且显然会导致问题。你最好的选择是找出安装了非标准 cp
命令(也许是自制软件?)的内容并将其删除。
- 如果它打印类似 "cp is aliased to <some command string>" 的内容,那么您在 shell 初始化文件之一(或 运行 等文件之一)中定义了一个别名。检查 ~/.profile、~/.bash_profile、~/.bash_login 和 ~/.bashrc 以获取别名定义的来源。
- 如果它打印 "cp is a function",那么您的 shell 初始化文件之一中定义了一个函数。像检查别名定义一样检查。
我的诀窍是必须以超级用户身份递归地执行 cp
命令。
不知道为什么
sudo /bin/cp -R -v -p source destination
-v
显示每个文件的复制进度。
干杯
格雷格
我在 OS X El Capitan。我有 2 个目录 SourceDir
& DestDir
,结构如下。
ParentDir/SourceDir |-s_dir1/ss_dir1
|-s_dir2
ParentDir/DestDir |-s_dir1/ss_dir2
|-ddir1
|-ddir2
|-ddir3
我想执行复制命令,使 ParentDir/SourceDir
中的 s_dir1
与 ParentDir/DestDir
中的 s_dir1
合并,此外,s_dir2
被放入 ParentDir/DestDir
。所以,复制后 ParentDir/DestDir
应该是这样的:
ParentDir/DestDir |-s_dir1/ss_dir1
|-s_dir1/ss_dir2
|-s_dir2
|-ddir1
|-ddir2
|-ddir3
我使用以下命令复制:
cp -f -R ParentDir/SourceDir/ ParentDir/DestDir/
在 MacOSSierra 上一切正常。但奇怪的是,它在装有 MacOS El Capitan 的 OS X 机器上不起作用。我再次在我同事的机器上用 MacOS El Capitan 试了一下。它工作正常!
怎么了?
不同版本的 MacOS El Capitan 与 cp command
的行为是否不同?
或者,我是否需要更改 El Capitan 上的复制命令语法?
如何在我的 MacOS El Capitan 机器上执行复制命令以确保至少在所有 OSX台机器?
请不要建议将 El Capitan 机器升级到 Sierra。这不是我的选择。因此发布了这个问题以获得 copy command
.
标准 cp
命令似乎被其他东西覆盖了。您可以通过显式指定 /bin/cp
强制它使用标准 cp
命令。您也可以尝试使用别名之类的东西来覆盖当前覆盖,但最好找出当前覆盖是什么,它来自哪里,然后(也许)摆脱它。
要做的第一件事是 运行 type cp
它的输出告诉你 cp
当前正在做什么:
- 如果它打印类似 "cp is /usr/local/bin/cp" 的内容,那么您已经安装了自定义安装的
cp
版本,它覆盖了标准版本...并且显然会导致问题。你最好的选择是找出安装了非标准cp
命令(也许是自制软件?)的内容并将其删除。 - 如果它打印类似 "cp is aliased to <some command string>" 的内容,那么您在 shell 初始化文件之一(或 运行 等文件之一)中定义了一个别名。检查 ~/.profile、~/.bash_profile、~/.bash_login 和 ~/.bashrc 以获取别名定义的来源。
- 如果它打印 "cp is a function",那么您的 shell 初始化文件之一中定义了一个函数。像检查别名定义一样检查。
我的诀窍是必须以超级用户身份递归地执行 cp
命令。
不知道为什么
sudo /bin/cp -R -v -p source destination
-v
显示每个文件的复制进度。
干杯
格雷格