Copy files from one directory into an existing directory
在bash中,我需要这样做:
获取目录中的所有文件
将它们复制到现有目录中
我该怎么做?我试过cp -r t1 t2(T1和T2都是现有目录,T1中有文件),但它在T2中创建了一个名为T1的目录,我不想这样,我需要T1中的文件直接进入T2。我该怎么做?
- 为什么要关闭?如果bash命令是内置或外部命令(如printf在大多数系统中都存在),那么它是任意的,因此cp问题可以看作是bash问题,这是一种编程语言。我从未见过关于文件复制的python问题被关闭。
- 看看stackoverflow.com/questions/23698183/…
- 我来到这里是为了寻找有关bash shell copy命令语法的提示,我很高兴地报告说,这些命令似乎也适用于我的Windows安装中的底层NTFS文件系统。
你想要的是:
结尾的点告诉它复制当前目录的内容,而不是目录本身。此方法还包括隐藏的文件和文件夹。
- 我真的很喜欢这种语法,但出于某种原因,它不适用于mv。有人知道为什么吗?
- 太神了。这是在哪里记录的?是POSIX还是扩展?
- @cirosantilli六个四件法轮功包轩如果您复制一个目录,cp将创建一个目录并将所有文件复制到其中。如果使用名为"."的假装文件夹(与保存该文件夹的目录相同),则副本的行为是这样的。假设T1包含一个名为"file"的文件。cp将执行相当于"cp t1//file t2//"的操作。它正在复制文件夹".",但将文件复制到t2的"."文件夹会删除"./",因为"t2/"与"t2/"相同。从技术上讲,这意味着它是POSIX内置的行为…但可能不会像你想象的那样!
- CP-R T1//。T2/为我工作
如果要将某个目录中的内容复制到当前目录中,请执行以下操作:
这假定您没有尝试复制隐藏文件。
或者如果你在dir1中有目录,你也要复制它
- 根据shell的配置方式,如果还想捕获隐藏文件,可能需要使用"dir1/*dir1/*"而不是"dir1/*"。
- 复制dir1/.*不是一个好主意,因为它复制dir1/。(即您实际尝试复制的目录的父目录)。它还复制dir1/。很好,除了它已经(大部分)被复制了,所以你要做两次。
- 您可以通过CD-ing到您要复制的目录中,然后将其称为.,来解决dir1/.*/hidden files问题。因此,如果要将所有文件(包括隐藏文件)从一个目录复制到一个现有目录中,您可以:cd 、cp . [path to destination dir, with no trailing slash]。
假设T1是包含文件的文件夹,而T2是空目录。你想要的是这样的:
记住,对于第一个示例,T1和T2必须是完整路径,或者是相对路径(基于您所在的位置)。如果需要,可以导航到空文件夹(t2)并执行以下操作:
或者,您可以导航到包含文件(T1)的文件夹,并执行以下操作:
注意,*符号(或通配符)代表所有文件和文件夹。-r标志以递归方式表示(所有内容都在其中)。
源目录上的尾随斜杠稍微改变了语义,因此它只复制内容,而不复制目录本身。它还避免了Bertrand答案中的全局文件和不可见文件的问题(复制t1/*会丢失不可见文件,复制't1/*t1/*'会复制T1/。还有T1/,你不想要)。
- 您的解决方案不起作用,至少在我的安装(Ubuntu 12.10)$ mkdir t1$ mkdir t2$ touch t1/one$ touch t1/two$ touch t1/.three$ cp -R t1/ t2$ ls t2/t1上不起作用(抱歉,注释中没有代码格式,Pastebin.com/yszsxv6g上有可读版本)
根据某些详细信息,您可能需要执行以下操作:
1 2 3 4 5 6 7
| r=$(pwd)
case"$TARG" in
/*) p=$r;;
*) p="";;
esac
cd"$SRC" && cp -r ."$p/$TARG"
cd"$r" |
…这基本上会更改到SRC目录,并将其复制到目标目录,然后返回到开始时的位置。
额外的麻烦是处理相对或绝对目标。
(这不依赖于cp命令本身的微妙语义……关于它如何处理带有或不带有尾随/的源规范。因为我不确定它们是否稳定、便携和可靠,而不仅仅是GNU cp,我也不知道它们将来是否会继续如此)。
对于某些目录,这将使用full,因为它将所有内容从"folder1"复制到某些目录中的新目录"folder2"。
$(pwd)将获取当前目录的路径。
注意folder1后面的点(.)以获取folder1中的所有内容
1
| cp -r $(pwd)/folder1/. $(pwd)/folder2 |