将文件从一个目录复制到现有目录中

Dav*_*ang 230 directory bash copy file cp

在bash我需要这样做:

  1. 获取目录中的所有文件

  2. 将它们复制到现有目录中

我该怎么做呢?我试过cp -r t1 t2(t1和t2都是现有的目录,t1里面有文件)但是它在t2里面创建了一个名为t1的目录,我不想这样,我需要t1中的文件直接进入t2.我该怎么做呢?

Nic*_*ick 369

你想要的是:

cp -R t1/. t2/
Run Code Online (Sandbox Code Playgroud)

最后的点告诉它复制当前目录的内容,而不是目录本身.此方法还包括隐藏文件和文件夹.

  • @CiroSantilli六四事件法轮功包卓轩如果复制目录,cp将创建一个目录并将所有文件复制到其中.如果使用名为"."的伪装文件夹,它与保存它的目录相同,则副本的行为方式如下.假设t1包含一个名为"file"的文件.cp将执行相当于"cp t1 /./ file t2 /./"的操作.它正在复制文件夹".",但将文件复制到t2的"."中.文件夹剥离"./",因为"t2 /./"与"t2 /"相同.从技术上讲,这意味着它的POSIX内置行为......但可能不像你期望的那样! (9认同)
  • 我真的很喜欢这种语法,但由于某些原因它不适用于`mv`.有谁知道为什么? (2认同)
  • 惊人.这记录在哪里?它是POSIX还是扩展? (2认同)

Kar*_*ing 33

如果要将某个目录中的内容复制到当前目录中,请执行以下操作:

cp dir1/* .
Run Code Online (Sandbox Code Playgroud)

这假设您没有尝试复制隐藏文件.

  • 错过了隐藏的文件. (19认同)

Ber*_*ron 29

cp dir1/* dir2
Run Code Online (Sandbox Code Playgroud)

或者,如果您在dir1中有目录,那么您也想复制它们

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

  • 根据shell的配置方式,如果你想捕获隐藏文件,你可能需要使用"dir1/*dir1 /.*"而不是"dir1/*". (3认同)
  • 复制`dir1 /.*`不是一个好主意,因为它复制dir1/..(即你实际上试图复制的目录的父目录).它还复制dir1 /.这很好,除了它已经(大部分)被复制了,所以你要做两次工作. (2认同)

Kon*_*ret 7

假设t1是其中包含文件的文件夹,t2是空目录。您想要的是这样的:

sudo cp -R t1/* t2/
Run Code Online (Sandbox Code Playgroud)

请记住,对于第一个示例,t1和t2必须是完整路径或相对路径(基于您所在的位置)。如果需要,可以导航到空文件夹(t2)并执行以下操作:

sudo cp -R t1/* ./
Run Code Online (Sandbox Code Playgroud)

或者,您可以导航到包含文件(t1)的文件夹,然后执行以下操作:

sudo cp -R ./* t2/
Run Code Online (Sandbox Code Playgroud)

注意:*符号(或通配符)代表所有文件和文件夹。-R标志是递归的(所有内容都在其中)。


Gor*_*son 6

cp -R t1/ t2
Run Code Online (Sandbox Code Playgroud)

源目录上的尾部斜杠稍微改变了语义,因此它复制内容而不是目录本身。它还避免了 Bertrand 的答案所存在的通配和不可见文件的问题(复制t1/*会丢失不可见文件,复制“t1/* t1/.*”会复制 t1/. 和 t1/..,这是您不想要的)。


小智 5

对于某些目录内部,这将使用 full,因为它将所有内容从“folder1”复制到某个目录中的新目录“folder2”。

$(pwd) 将获取当前目录的路径。

注意文件夹 1 后面的点 (.) 以获取文件夹 1 中的所有内容

cp -r $(pwd)/folder1/. $(pwd)/folder2
Run Code Online (Sandbox Code Playgroud)


小智 5

2021 年 11 月更新:

\n

此带有标志“-R”的代码将“folder1”所有内容完美复制到现有的“folder2”

\n
cp -R folder1/. folder2\n
Run Code Online (Sandbox Code Playgroud)\n

标志“-R”也复制符号链接,但标志“-r”跳过符号链接,因此标志“-R”比标志“-r”更好。

\n
    \n
  • 最新的 GNU Grep 3.7
  • \n
\n
-R, --dereference-recursive\n\nFor each directory operand, read and process all files in that directory, \nrecursively, following all symbolic links.\n
Run Code Online (Sandbox Code Playgroud)\n
-r, --recursive\n\nFor each directory operand, read and process all files in that directory, \nrecursively. Follow symbolic links on the command line, but skip symlinks \nthat are encountered recursively. Note that if no file operand is given, \ngrep searches the working directory. This is the same as the \n\xe2\x80\x98--directories=recurse\xe2\x80\x99 option.\n
Run Code Online (Sandbox Code Playgroud)\n