在 bash 我需要这样做:
将目录中的所有文件复制到现有目录中
我该怎么做呢?我尝试了 cp -r t1 t2
(t1 和 t2 都是现有目录,t1 中有文件)但它在 t2 中创建了一个名为 t1 的目录,我不希望这样,我需要 t1 中的文件直接进入 t2。我该怎么做呢?
cp
问题很可能被视为 bash
问题,它是一种编程语言。我从来没有见过一个关于文件复制的 Python 问题被关闭。
你想要的是:
cp -R t1/. t2/
最后的点告诉它复制当前目录的内容,而不是目录本身。此方法还包括隐藏文件和文件夹。
cp dir1/* dir2
或者,如果您在 dir1 中也有想要复制的目录
cp -r dir1/* dir2
dir1/.*
不是一个好主意,因为它复制了 dir1/..(即您实际尝试复制的目录的父目录)。它还复制 dir1/。这很好,除了它已经(大部分)被复制了,所以你做了两次工作。
.
来解决 dir1/.*
/hidden files 问题。因此,如果您想将包括隐藏文件在内的所有文件从目录复制到现有目录,您可以:cd [source dir]
、cp . [path to destination dir, with no trailing slash]
。
如果要将某个目录中的某些内容复制到当前目录中,请执行以下操作:
cp dir1/* .
这假设您没有尝试复制隐藏文件。
假设 t1 是其中包含文件的文件夹,而 t2 是空目录。你想要的是这样的:
sudo cp -R t1/* t2/
请记住,对于第一个示例,t1 和 t2 必须是完整路径或相对路径(基于您所在的位置)。如果需要,您可以导航到空文件夹 (t2) 并执行以下操作:
sudo cp -R t1/* ./
或者您可以导航到包含文件 (t1) 的文件夹并执行以下操作:
sudo cp -R ./* t2/
注意:* 符号(或通配符)代表所有文件和文件夹。 -R 标志表示递归(所有内容中的所有内容)。
对于某个目录内,这将使用完整的,因为它将所有内容从“folder1”复制到某个目录内的新目录“folder2”。
$(pwd) 将获取当前目录的路径。
注意文件夹 1 后的点 (.) 以获取文件夹 1 中的所有内容
cp -r $(pwd)/folder1/. $(pwd)/folder2
cp -R t1/ t2
源目录上的尾部斜杠稍微改变了语义,因此它复制了内容而不是目录本身。它还避免了 Bertrand 的答案所具有的通配和不可见文件的问题(复制 t1/*
会丢失不可见文件,复制 `t1/* t1/.*' 复制 t1/. 和 t1/..,这是您不想要的) .
$ mkdir t1
$ mkdir t2
$ touch t1/one
$ touch t1/two
$ touch t1/.three
$ cp -R t1/ t2
$ ls t2/
t1
(对不起,评论中没有代码格式,可读版本在pastebin.com/yszSxV6G)
2021 年 11 月更新:
带有标志“-R”的代码将“folder1”的所有内容完美地复制到现有的“folder2”:
cp -R folder1/. folder2
标志“-R”也复制符号链接,但标志“-r”跳过符号链接,因此标志“-R”优于标志“-r”。
最新的 GNU Grep 3.7:
-R, --dereference-recursive
For each directory operand, read and process all files in that directory,
recursively, following all symbolic links.
-r, --recursive
For each directory operand, read and process all files in that directory,
recursively. Follow symbolic links on the command line, but skip symlinks
that are encountered recursively. Note that if no file operand is given,
grep searches the working directory. This is the same as the
‘--directories=recurse’ option.
根据一些细节,您可能需要执行以下操作:
r=$(pwd)
case "$TARG" in
/*) p=$r;;
*) p="";;
esac
cd "$SRC" && cp -r . "$p/$TARG"
cd "$r"
...这基本上会更改为 SRC 目录并将其复制到目标,然后返回到您开始的位置。
额外的大惊小怪是处理相对或绝对目标。
(这不依赖于 cp
命令本身的微妙语义......关于它如何处理带有或不带尾随 / 的源规范......因为我不确定它们是否稳定、便携和可靠,不仅仅是GNU cp
,我不知道他们将来是否会继续如此)。
正确的选项应该是 -T
。与 -r
一起使用以递归复制。
$ cp -r -T t1 t2
不定期副业成功案例分享
mv
。有谁知道为什么?