如何有效地将所有目录移动到同一文件夹中的单个目录中?

如何有效地将所有目录移动到同一文件夹中的单个目录中?

我在一个文件夹中有 100 个文件,其中包括一个名为“target”的文件夹。我想将此文件夹中的所有文件迁移到文件夹 target 中(target 文件夹本身除外)。

是否有有效的终端命令可以执行此操作?

答案1

如果您的目录中只有文件(和目录目标),只需使用mv,而不是find

mv * target

它会抱怨“目标”无法自行移动,但之后所有文件都会在目标中。

答案2

用这个

$ mv target ..
$ mv * ../target
$ mv ../target .

答案3

这也有效:

find . -maxdepth 1 ! -name target ! -name . -exec mv "{}" target \;

过度依赖 bash 完成的一个主要优点find是您可以同时获得隐藏文件。mv * ...不会那样做。

你或许可以选择类似这样的方法:

mv -t target * .[^.]*

或者正如詹姆斯指出的那样,你可以精简 find 命令以仅查看文件...并且正如 LoremIpsum 指出的那样,如果有数十亿个文件,使用xargs会稍微更有效率:

find . -maxdepth 1 -type f -print0 | xargs -0 mv -t target

答案4

方法是将目标目录移动到上一个目录,然后将所有内容移动到该目录,最后将其移回当前目录(如果可以的话)。唯一的问题是,它不适用于我们需要保留历史记录的 git 项目目录。

因此对于 git 目录只需像这样移动:git mv * 目标 -k

-k选项用于跳过移动/重命名错误

相关内容