Сравнивая структуру файлов

У меня есть 2 структуры директорий:

dir1
├── 1
│   └── file1
├── 2
│   └── file1
├── 3
│   └── file1
├── 4
│   └── file1
├── 5
    └── file1
dir2
├── 1
├── 2
├── 5

Я использую xargs mkdir -p для создания file.txt с имена режиссеров. В этом файле я получил только пути к каталогам, без файлов в каталогах. Как извлечь пути к файлам включает только список каталогов в dirs.txt ?

Например: мне нужно извлечь из dir1 структуру каталогов из dir2 с файлами из dir1 . Это должно выглядеть так: dir3 :

dir3
├── 1
│   └── file1
├── 2
│   └── file1
├── 5
│   └── file1

На последнем шаге я буду использовать: rsync -a / source / directory --files-from = / full / path / to / список-файл / место назначения / каталог

0
задан 2 July 2021 в 08:22

2 ответа

Трудности с такими задачами обычно возникают, когда нужно сопоставить что-то в середине пути, в данном случае, похоже, вы можете сопоставить второй уровень из двух списков каталогов. Я также предполагаю, что у вас нет, например, новых строк в любом из путей.

awk -F / -vOFS=/ -vf=2 'NR==FNR {a[$f]++; next} $f in a {$1=""; print $0}' \
      <(printf %s\\n dir2/*) dirs.txt | rsync -avx --files-from=- dir1/ dir3

Установка разделителя -F на / в основном делает поля из различных компонентов пути, компонент пути после начальной точки станет вторым полем. Действие первого шаблона NR==FNR {} считывает первый файл в массив, который является списком каталогов dir2. Когда первый файл достигает конца, NR==FNR становится ложным и второй файл будет обработан следующим действием шаблона. Перед печатью пути, start-point должен быть удален, чтобы учесть источник/назначение rsync.

0
ответ дан 28 July 2021 в 11:22

Используйте команду find . С помощью флага -type можно указать, чтобы он находил только каталоги, а с помощью флага -path - находить только элементы, соответствующие пути. Например,

find . -path './dir1/*' -type d

перечислит только все каталоги и подкаталоги в dir1 . Затем вы можете перенаправить его в файл dirs.txt и отредактировать этот файл по своему усмотрению.

0
ответ дан 28 July 2021 в 11:22

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

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