我在一个文件夹中有 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选项用于跳过移动/重命名错误