如何将多个目录合并为一个

如何将多个目录合并为一个

我在一个目录下的多个文件夹中有多个文件,需要将它们放在一个文件夹中。有没有命令行可以帮助我实现这一点?

答案1

使用find++ xargsmv

find . -type f -print0 | xargs -0 -I file mv --backup=numbered file .

这会将当前工作目录及其子目录下的所有文件(递归)移动到当前工作目录中,并对具有相同文件名的文件进行数字编号,以避免覆盖具有相同文件名的文件。

tmp包含 和 的文件夹的示例结果1,每个23文件夹包含1.ext和文件:2.ext3.ext

ubuntu@ubuntu:~/tmp$ tree
.
├── 1
│   ├── 1.ext
│   ├── 2.ext
│   └── 3.ext
├── 2
│   ├── 1.ext
│   ├── 2.ext
│   └── 3.ext
└── 3
    ├── 1.ext
    ├── 2.ext
    └── 3.ext

3 directories, 9 files
ubuntu@ubuntu:~/tmp$ find . -type f -print0 | xargs -0 -I file mv --backup=numbered file .
ubuntu@ubuntu:~/tmp$ tree
.
├── 1
├── 1.ext
├── 1.ext.~1~
├── 1.ext.~2~
├── 2
├── 2.ext
├── 2.ext.~1~
├── 2.ext.~2~
├── 3
├── 3.ext
├── 3.ext.~1~
└── 3.ext.~2~

3 directories, 9 files

答案2

如果你的目录结构如下

根目录

  • 目录
    • 提交
    • 文件b
  • 目录B
    • 文件c
    • 文件 d

等等

你可以做一个简单的

mv **/* .

将深度 1 处的所有文件移动到根目录。简单又优雅!

答案3

您可以使用以下方法执行此操作find

find . -type f -exec mv -i -t new_dir {} +

首先创建mkdir new_dir要移动所有文件的目录(),这里我们移动./new_dir目录中的所有文件。

  • find . -type f将会找到当前目录下所有目录下的所有文件,因此你需要cd进入包含所有子目录的目录,或者你可以使用绝对路径,例如~/foo/bar

  • 谓词将执行将找到的所有文件移动到目录的命令。再次,您可以使用绝对路径-execfindmvnew_dir

  • mv -i覆盖文件之前会提示您。

如果新目录位于其他位置,请使用绝对路径:

find ~/path/to/dir -type f -exec mv -i -t ~/path/to/new_dir {} +

答案4

find /path/to/root/directory -type f -exec mv {} /path/to/destination/folder/ \;

让我们分解命令并了解每个部分:

  • find:用于在指定位置内搜索文件和目录的命令。
  • /path/to/root/directory:将其替换为子目录所在的根目录的实际路径。
  • -type f:指定我们正在寻找常规文件(而不是目录)。
  • -exec mv {} /path/to/destination/folder/ \;:对找到的每个文件 ({}) 执行 mv 命令。它将每个文件移动 (mv) 到指定的目标文件夹 (/path/to/destination/folder/)。

相关内容