Как я могу объединить несколько каталогов в один

У меня есть несколько файлов в нескольких папках в одном каталоге, которые должны находиться в одной папке. Есть ли командная строка, которая может помочь мне в этом?

2
задан 9 June 2015 в 11:23

4 ответа

Используя find + xargs + mv:

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

Это переместит все файлы в текущий рабочий каталог и его подкаталоги (рекурсивно) в текущий рабочий каталог, нумеруя файлы с тем же именем файла численно для предотвращения перезаписей файлов с тем же именем файла.

Демонстрационный результат на tmp папка с 1, 2 и 3 подпапки каждый содержащий 1.ext, 2.ext и 3.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
0
ответ дан 9 June 2015 в 11:23

Можно сделать это использование find:

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

Сначала создают каталог (mkdir new_dir), где Вы хотите переместить все файлы, здесь мы перемещаем все файлы в ./new_dir каталог.

  • find . -type f найдет все файлы в соответствии со всеми каталогами под текущим каталогом, таким образом, Вам нужно к cd в каталог, который содержит все подкаталоги, или можно использовать полный путь, например, ~/foo/bar

  • -exec, предикат find выполнится эти mv команда, которая переместит все файлы, найденные в new_dir каталог. Еще раз можно использовать полный путь.

  • mv -i предложит Вам прежде, чем перезаписать файл.

, Если новый каталог расположен в другом месте, используйте полные пути:

find ~/path/to/dir -type f -exec mv -i -t ~/path/to/new_dir {} +
0
ответ дан 9 June 2015 в 11:23

можно использовать команду:

find . -type f -execdir mv '{}' /parent-dir \;

man find

 -execdir utility [argument ...] ;
     The -execdir primary is identical to the -exec primary with the exception that 
     utility will be executed from the directory that holds the current
     file.  The filename substituted for the string ``{}'' is not qualified.
0
ответ дан 9 June 2015 в 11:23

Если Ваша структура каталогов похожа

корень dir

  • dir
    • файл d

dir B

  • файла c
  • файла b
  • файла a и так далее

    , можно сделать простое

    mv **/* .
    

    для перемещения всех файлов в глубину 1 к корневому каталогу. Простой и Изящный!

    0
    ответ дан 17 April 2019 в 22:31

    Другие вопросы по тегам:

    Похожие вопросы: