将当前目录的内容复制到子目录

将当前目录的内容复制到子目录

如何使用 Linux 终端将当前目录中的所有内容复制到子目录?

答案1

如果您想递归复制文件夹的内容(将引发 1 个错误,下面有替代方案):

cp -r * sub/

有点 hacking,但适用于非空子目录:

TARGETDIR='targetdir here';cp -r `find . -maxdepth 1 ! -name "$TARGETDIR"` "$TARGETDIR"

另一句台词:

TARGETDIR='targetdir here';for file in *;do test "$file" != "$TARGETDIR" && cp "$file" "$TARGETDIR/";done

或者递归:

TARGETDIR='z';for file in *;do test "$file" != "$TARGETDIR" && cp -r "$file" "$TARGETDIR/";done

答案2

假设target是目标子目录的名称,如果您的 shell 是 bash:

shopt -s extglob
cp -r !(target) target/

在 ksh 中,您可以直接执行cp -r !(target) target/

在 zsh 中,你可以执行setopt ksh_globthen cp -r !(target) target/。另一种可能性是setopt extended_globthen cp -r ^target target/

答案3

我建议将目标目录移到源目录之外,然后再放回去;mv 是免费的(如果您小心不要移动到不同的文件系统),除非您预计其他进程会干扰/受到干扰。

如果文件名中有空格,上面发布的大多数解决方案都不起作用。我建议使用 find -print0 | xargs -0 或 find -exec 等的变体。

答案4

这会将所有内容(包括点文件,但不包括目标目录本身)复制到目标目录SUBDIR

for i in `ls -a | grep -Ev '^(SUBDIR|\.\.?)$'`; do cp $i SUBDIR; done

相关内容