@mr_creo

Как объединить два каталога?

Как обьединить два каталога с заменой при совпадении, не копированием файлов а именно перемещением ?
Структура в каталогах dir1 и dir2 неизвестна и может частично повторяться.
Желательно в одну строку.
До
.
 |-- dir1
 |   |-- a
 |   |   |-- file1.txt (60GB)
 |   |   `-- file2.txt
 |   |-- b
 |   |   `-- file3.txt (20GB)
 |   `-- c
 |       `-- file4.txt
 `-- dir2
     |-- a
     |   |-- file1.txt (10GB)
     |   `-- file6.txt
     |-- b
     |   |-- file3.txt (50GB)
     |   `-- file8.txt
     `-- c
         |-- file10.txt
         `-- file9.txt


После
.
 |-- dir1
 `-- dir2
     |-- a
     |   |-- file1.txt (60GB)
     |   |-- file2.txt
     |   `-- file6.txt
     |-- b
     |   |-- file3.txt (20GB)
     |   `-- file8.txt
     `-- c
         |-- file4.txt
         |-- file9.txt
         `-- file10.txt


Для создания структуры:
mkdir test
cd test
mkdir dir1 dir1/a dir1/b dir1/c
dd if=/dev/zero of=dir1/a/file1.txt bs=1M count=60
dd if=/dev/zero of=dir1/a/file2.txt bs=1M count=1
dd if=/dev/zero of=dir1/b/file3.txt bs=1M count=20
dd if=/dev/zero of=dir1/c/file4.txt bs=1M count=1
mkdir dir2 dir2/a dir2/b dir2/c
dd if=/dev/zero of=dir2/a/file1.txt bs=1M count=10
dd if=/dev/zero of=dir2/a/file6.txt bs=1M count=1
dd if=/dev/zero of=dir2/b/file3.txt bs=1M count=50
dd if=/dev/zero of=dir2/b/file8.txt bs=1M count=1
dd if=/dev/zero of=dir2/c/file9.txt bs=1M count=1
dd if=/dev/zero of=dir2/c/file10.txt bs=1M count=1

Посмотреть структуру:
tree .
  • Вопрос задан
  • 382 просмотра
Решения вопроса 1
xotkot
@xotkot
хорошо есть и хорошо весьма
до:
% tree -h test
test
├── [4.0K]  dir1
│   ├── [4.0K]  a
│   │   ├── [ 60M]  file1.txt
│   │   └── [1.0M]  file2.txt
│   ├── [4.0K]  b
│   │   └── [ 20M]  file3.txt
│   └── [4.0K]  c
│       └── [1.0M]  file4.txt
└── [4.0K]  dir2
    ├── [4.0K]  a
    │   ├── [ 10M]  file1.txt
    │   └── [1.0M]  file6.txt
    ├── [4.0K]  b
    │   ├── [ 50M]  file3.txt
    │   └── [1.0M]  file8.txt
    └── [4.0K]  c
        ├── [1.0M]  file10.txt
        └── [1.0M]  file9.txt

8 directories, 10 files

не копируем, а создаём жесткие ссылки:
% cp -lrf test/dir{1/*,2} && rm -rf test/dir1/*

после:
% tree -h test
test
├── [4.0K]  dir1
└── [4.0K]  dir2
    ├── [4.0K]  a
    │   ├── [ 60M]  file1.txt
    │   ├── [1.0M]  file2.txt
    │   └── [1.0M]  file6.txt
    ├── [4.0K]  b
    │   ├── [ 20M]  file3.txt
    │   └── [1.0M]  file8.txt
    └── [4.0K]  c
        ├── [1.0M]  file10.txt
        ├── [1.0M]  file4.txt
        └── [1.0M]  file9.txt

5 directories, 8 files
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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