相关疑难解决方法(0)

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
查看次数

如何防止`mv`将一组文件移动到一个常规文件中?

由于我犯的一个愚蠢的错误,我刚刚丢失了我的音频收藏的一小部分。:-( 很
高兴我有一个相当新的备份,但它仍然很烦人。除了你的真实之外,另一个做恶作剧的罪魁祸首是mv,它将显示如下:

音频文件有一定的方案:

ARTIST - Some Title YY.mp3
Run Code Online (Sandbox Code Playgroud)

其中YY是 2 位数年份规范。

mkdir 90<invisible control character>
Run Code Online (Sandbox Code Playgroud)

(直到此刻,我都不知道我实际上输入了三分之一看不见的多余字符......!)
我希望将所有 1990 年代的音乐都放在一个目录中,而不是将所有内容都放在一个目录中。所以我输入:

find . -name '* 9?.mp3' -exec mv {} 90 \;
Run Code Online (Sandbox Code Playgroud)

不难明白发生了什么,嗯?:->
(灾难性的)结果是一个名为“90 something ”的原始目录(某些东西是“隐形”控制字符)和一个名为“90”​​的单个文件,被覆盖了n次。

所有文件都不见了。:-(( (明显地)

Wishmv会及时检查目标“文件”的签名(请记住 *NIX: Everything Is A File是否d------(例如drwxr-xr-x)开头。而且,当然,目的地是否存在。有上述情况下,当你只是一个变种mkdir的目录第一。(当然,你假设它在那里......)

甚至我们以大写字母W开头的讨厌的操作系统也会这样做。如果您要求,甚至会提示您指定目标类型(文件?目录?)。

因此,我想知道我们 *NIXers …

mv

17
推荐指数
4
解决办法
2036
查看次数

cp --no-target-directory 解释

问题:我需要一个简单的示例来说明如何使用cp --no-target-directory.

我确实在理解上遇到了一些困难cp --no-target-directory。我确实理解的解释mv --no-target-directory,但我真的无法想象将它用于 的方法cp

例如,当命令mv /tmp/source /tmp/dest成功时,不能保证/tmp/source已重命名为/tmp/dest/tmp/dest/source如果其他进程创建/tmp/dest为目录,则可以将其重命名为。但是,如果mv -T /tmp/source /tmp/dest成功,毫无疑问/tmp/source was renamed to/tmp/dest`。(来源

directory cp coreutils

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

/ 之间的差异复制内容文件夹。和 /* 在 linux 中

从我读过的文件夹中复制内容,用途是:

cp -rfva ../foldersource/. ./
Run Code Online (Sandbox Code Playgroud)

但这也有效

cp -rfva ../foldersource/* ./
Run Code Online (Sandbox Code Playgroud)

有什么区别吗?

例如,如果我想从文件夹中删除内容。:

rm -rf ../foldersource/.
Run Code Online (Sandbox Code Playgroud)

我收到错误:

rm:  rejet delete folder '.' or '..':
Run Code Online (Sandbox Code Playgroud)

但带星号就可以了

rm -rf ../foldersource/*
Run Code Online (Sandbox Code Playgroud)

那么,星号是适用于任何地方的更好选择吗?

linux shell

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

cp -r 中的语法差异以及如何克服它们

假设我们在一个空白目录中。然后,执行以下命令:

mkdir dir1
cp -r dir1 dir2
Run Code Online (Sandbox Code Playgroud)

生成两个(空白)目录dir1dir2,其中dir2已创建为dir1. 但是,如果我们这样做:

mkdir dir1
mkdir dir2
cp -r dir1 dir2
Run Code Online (Sandbox Code Playgroud)

然后我们反而发现dir1现在已经放到里面了dir2。这意味着完全相同的cp命令的行为取决于目标目录是否存在。如果是,则该cp命令的作用与此相同:

mkdir dir1
mkdir dir2
cp -r dir1 dir2/.
Run Code Online (Sandbox Code Playgroud)

这对我来说似乎非常违反直觉。我原以为cp -r dir1 dir2(当dir2已经存在时)会删除现有dir2(和任何内容)并将其替换为dir1,因为这是cp用于两个文件时的行为。我知道递归副本本身有点不同,因为目录在 Linux 中(更广泛地在类 Unix 系统中)存在,但我正在寻找更多关于为什么选择这种行为的解释。如果您能指出一种方法来确保cp行为符合我的预期(而不必事先测试并删除目标目录),则可以加分。我尝试了一些cp选择,但没有任何运气。我想我会接受rsync 为了其他不知道该命令的人在这个问题上发生的解决方案。

如果这种行为不普遍,我在 CentOS 上使用 bash。

linux command-line cp history

5
推荐指数
1
解决办法
485
查看次数

如果 cp 的目标路径是一个目录,我如何避免错误地在该目录中创建文件?

我的理解cp src dest是:

  1. 如果src是一个文件并且dest不存在,但它的父目录存在,dest则创建。
  2. 如果src是一个文件并且dest是一个文件,dest则被src.
  3. 如果src是文件并且dest是目录,dest/src则创建。

我试图避免情况#3。如果我编写一个脚本,假设它dest 不是一个目录,但在运行时结果是这样,我不想cp将文件放在错误的位置并继续静默。

相反,我希望它:

  • 删除整个dest目录并将其替换为所需的文件。
  • 不做任何事情就出错。

我也更喜欢这种情况以原子方式发生。使用单独的命令test -d来检查是否dest是目录会为 TOCTTOU 问题提供机会。

这可以做到cp吗?如果没有,是否可以使用任何其他类似的无处不在的命令来完成?

我对便携式解决方案和依赖非标准扩展的解决方案都感兴趣,只要它们相当普遍。

cp files

5
推荐指数
1
解决办法
171
查看次数

cp -a 无法复制目录中的所有文件

我希望将仅包含这些文件的目录内的所有文件(所有文件都是常规文件 - 该目录内没有目录、符号链接等)复制到另一个预先存在的目录。

这些文件具有非常常见的名称,例如robots.txt,并且不遵循任何特定模式。

我尝试了类似的命令:

cp -a "$HOME"/a "$HOME"/b 
Run Code Online (Sandbox Code Playgroud)

我知道这-a是一个快捷组合-d(保留模式、所有权和时间戳)以及-R命令递归复制。

如果复制是递归的,为什么不复制文件以及解决方案是什么?

directory gnu cp recursive

-1
推荐指数
1
解决办法
3355
查看次数