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

Ogu*_*gic 15 linux terminal console

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

Lek*_*eyn 13

如果你想递归复制文件夹的内容(会抛出 1 个错误,下面的替代方案):

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

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

TARGETDIR='targetdir here';cp -r `find . -maxdepth 1 ! -name "$TARGETDIR"` "$TARGETDIR"
Run Code Online (Sandbox Code Playgroud)

另一个单线:

TARGETDIR='targetdir here';for file in *;do test "$file" != "$TARGETDIR" && cp "$file" "$TARGETDIR/";done
Run Code Online (Sandbox Code Playgroud)

或递归:

TARGETDIR='z';for file in *;do test "$file" != "$TARGETDIR" && cp -r "$file" "$TARGETDIR/";done
Run Code Online (Sandbox Code Playgroud)

  • 对于包含空格的文件名,您的第二个命令失败。使用 `xargs` 或 `-exec`。不需要`grep` - 使用`! -name "$TARGETDIR"` 或类似名称。你在 `$file` 周围有无与伦比的引号。我不认为递归 `cp` 会按照你的意图工作,但你的第一个命令除外。 (2认同)

Gil*_*il' 5

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

shopt -s extglob
cp -r !(target) target/
Run Code Online (Sandbox Code Playgroud)

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

在 zsh 中,你可以setopt ksh_glob这样做cp -r !(target) target/setopt extended_glob那么还有一种可能cp -r ^target target/


kar*_*lip 0

这对你有用吗?

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

如果您打算移动而不是将当前目录中的所有内容复制到子目录中,您可以这样做:

mv * subdir/
Run Code Online (Sandbox Code Playgroud)