标签: cp

如何抑制来自 cp 的错误消息?

我目前正在寻找在 Linux 中抑制错误命令的方法,特别是命令cp.

我愿意:

root@ubuntu:~$ cp /srv/ftp/201*/wha*/*.jj ~/.
cp: cannot stat `/srv/ftp/201*/wha*/*.jj': No such file or directory
Run Code Online (Sandbox Code Playgroud)

如何抑制打印在屏幕上的错误消息?即,我不想在显示器中看到此错误消息。

shell cp wildcards

28
推荐指数
3
解决办法
8万
查看次数

无法创建常规文件“文件名”:文件存在

我在我的一个构建脚本中收到了这个奇怪的错误消息 -cp失败,返回错误“文件存在”。我什至尝试使用cp -f,如果文件存在,它应该覆盖文件,但错误仍然出现。cp当我手动执行时,运行以覆盖现有文件效果很好。什么可能导致此错误?

cp concurrency

26
推荐指数
1
解决办法
3万
查看次数

GNU cp 和 mv 中 -T 选项的附加值是什么?

为什么有些 GNU Coreutils 命令有-T/--no-target-directory选项?似乎它所做的一切都可以使用.传统 Unix 目录层次结构中的(自点)语义来实现。

考虑:

cp -rT /this/source dir
Run Code Online (Sandbox Code Playgroud)

-T选项可防止副本创建dir/source子目录。而是/this/source被标识dir并相应地在树之间映射内容。因此,例如/this/source/foo.c转到dir/foo.c等等,而不是到dir/source/foo.c

但这可以很容易地完成,而无需-T使用以下选项:

cp -r /this/source/. dir  # Probably worked fine since dawn of Unix?
Run Code Online (Sandbox Code Playgroud)

从语义上讲,尾随点组件被复制为 的子级dir,但当然该“子级”已经存在(因此不必创建)并且实际上是dir它本身,因此效果是用/this/path标识的dir

如果当前目录是目标,它工作正常:

cp -r /this/tree/node/. . # node's children go to current dir
Run Code Online (Sandbox Code Playgroud)

有什么东西你只能-T它来合理化它的存在吗?(除了对未实现点目录的操作系统的支持,文档中未提及的基本原理。)

上面的点技巧是否不能解决 GNU 信息文档中提到的相同竞争条件-T

cp coreutils

26
推荐指数
3
解决办法
2525
查看次数

cp -x 的目的(留在文件系统上)?

如果我想留在同一个文件系统上,我不能为同一个文件系统指定一个输出路径吗?

还是为了防止意外离开当前文件系统?

command-line filesystems cp files data

26
推荐指数
2
解决办法
4106
查看次数

尝试失败后如何cp剩余文件

我正在尝试将一个大目录从一个驱动器复制到另一个驱动器。我在完成之前错误地注销了,所以只有大约 80% 的文件复制了过来。是否可以在不从头开始的情况下复制剩余的文件?

cp

24
推荐指数
3
解决办法
4706
查看次数

如果在复制文件时修改了文件,会发生什么情况?

将文件 fileA.big (900mb) 从位置 B 复制到位置 C 有什么影响,如果在该 cp 操作期间,例如通过该过程的 35%,fileA.big 附加了新信息并从 900MB 增长到 930MB?

最终副本的结果是什么(即位置 C 的 fileA.big)?

如果副本通过了大约70%,并且原始文件被更新但这次被截断为400MB(即副本的进度超出了截断点),那么最终副本的结果是什么?

指 ext3/ext4 文件系统上的 Linux 操作系统。没有卷影魔法等。只是普通的老cp。通过复制实时 CouchDB 文件进行备份激发了好奇心,但对一般场景而不是特定用例更感兴趣。

cp file-copy

23
推荐指数
2
解决办法
9040
查看次数

cp 在 . (dot) 或 .. (dot dot) 是源目录

这个答案表明可以将所有文件(包括隐藏文件)从目录复制src到目录中,dest如下所示:

mkdir dest
cp -r src/. dest
Run Code Online (Sandbox Code Playgroud)

答案或其评论中没有解释为什么这实际上有效,似乎也没有人找到有关此的文档。

我尝试了一些东西。一、正常情况:

$ mkdir src src/src_dir dest && touch src/src_file src/.dotfile dest/dest_file
$ cp -r src dest
$ ls -A dest
dest_file  src
Run Code Online (Sandbox Code Playgroud)

然后,/.最后:

$ mkdir src src/src_dir dest && touch src/src_file src/.dotfile dest/dest_file
$ cp -r src/. dest
$ ls -A dest
dest_file  .dotfile  src_dir  src_file
Run Code Online (Sandbox Code Playgroud)

因此,这与 的行为类似*,但也会复制隐藏文件。

$ mkdir src src/src_dir dest && touch src/src_file src/.dotfile dest/dest_file
$ cp -r src/* dest …
Run Code Online (Sandbox Code Playgroud)

documentation hard-link cp recursive dot-files

23
推荐指数
1
解决办法
6191
查看次数

为什么 cp 的选项是不覆盖名为 --no-clobber 的文件?

cp 是一个非常流行的 Linux 工具,由 GNU 基金会的 coreutils 团队维护。

默认情况下,具有相同名称的文件将被覆盖,如果用户想要更改此行为,他们可以添加--no-clobber到他们的复制命令中:

   -n, --no-clobber
          do not overwrite an existing file (overrides a previous -i option)
Run Code Online (Sandbox Code Playgroud)

为什么不是这样的--no-overwrite

gnu cp coreutils history user-interface

23
推荐指数
2
解决办法
4533
查看次数

对 cp 与硬链接的行为感到惊讶

我非常了解硬链接的概念,并且已经多次阅读基本工具的手册页,例如cp--- 甚至最近的 POSIX 规范。我仍然惊讶地观察到以下行为:

$ echo john > john
$ cp -l john paul
$ echo george > george
Run Code Online (Sandbox Code Playgroud)

此时johnpaul将具有相同的 inode(和内容),并且george在这两个方面都会有所不同。现在我们这样做:

$ cp george paul
Run Code Online (Sandbox Code Playgroud)

在这一点上,我期望georgepaul拥有不同的 inode 编号但内容相同——这个期望得到了满足——但我期望paul现在有一个不同的 inode 编号john,并且john仍然有内容john。这是我感到惊讶的地方。事实证明,将文件复制到目标路径paul也会导致在共享paul的 inode 的所有其他目标路径上安装相同的文件(相同的 inode)。我想cp创建一个新文件并将其移动到以前由旧文件占据的位置paul。相反,它似乎是打开现有文件paul,截断它,然后写入george的内容到现有文件中。因此,具有相同 inode 的任何“其他”文件都会同时更新“他们的”内容。

好的,这是一种系统行为,现在我知道期待它,我可以弄清楚如何解决它,或者在适当的时候利用它。让我感到困惑的是,我应该在哪里看到这种行为的记录?如果它没有记录我会感到惊讶的地方在文件我已经看过。但显然我错过了它,现在找不到讨论这种行为的来源。

hard-link cp

22
推荐指数
3
解决办法
3376
查看次数

在将文件从 nfs-share 复制到本地目录时,rsync 与 cp 相比非常慢(因子 8 到 10)

我有一个新安装的 Ubuntu 服务器,它应该是我们 VM 存储的新备份服务器。该服务器有 4 个网卡,其中 2 个是 10Gbit(实际上是具有最新驱动程序的 intel x540-T2),用于连接到 SAN。我在本地安装了 nfs-share 并比较了速度差异,同时复制了一个包含 ~30 个文件、大约 15 个 vm-images 和相应日志文件的目录。图像大小介于 8 GB 和 600 GB 之间。

使用:

cp -rf /mnt/nfs-share /backup-storage/
Run Code Online (Sandbox Code Playgroud)

bmon 因此显示大约 600 MiB/s。

使用

rsync -av /mnt/nfs-share /backup-storage/
Run Code Online (Sandbox Code Playgroud)

bmon 在前几秒显示一些数据包,暂停大约 30 秒,然后增加到大约 60-75 MiB/s。CPU在60%左右。

我应该/可以更改什么以使用rsync与 相同的性能cp

performance ubuntu cp rsync

21
推荐指数
2
解决办法
5万
查看次数