在 bash 我需要这样做:
获取目录中的所有文件
将它们复制到现有目录中
我该怎么做呢?我试过cp -r t1 t2
(t1 和 t2 都是现有目录,t1 里面有文件)但是它在 t2 中创建了一个名为 t1 的目录,我不希望这样,我需要 t1 中的文件直接进入 t2。我该怎么做呢?
你想要的是:
cp -R t1/. t2/
最后的点告诉它复制当前目录的内容,而不是目录本身。此方法还包括隐藏文件和文件夹。
cp dir1/* dir2
或者,如果您在 dir1 中也有想要复制的目录
cp -r dir1/* dir2
如果要将某个目录中的某些内容复制到当前目录中,请执行以下操作:
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/..,这是您不想要的)。
带有标志“-R”的代码将“folder1”的所有内容完美地复制到现有的“folder2”:
cp -R folder1/. folder2
标志 "-R"也复制符号链接,但标志 "-r"跳过符号链接,因此标志 "-R"比标志 "-r"更好。
-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
命令本身的微妙语义......关于它如何处理带有或不带尾随 / 的源规范......因为我不确定那些除了 GNUcp
和我之外是稳定的、可移植的和可靠的不知道以后还会不会这样)。