скопировать структуру каталогов без файлов - PullRequest
1 голос
/ 03 апреля 2020

Здравствуйте, я пытаюсь создать скрипт, который принимает два аргумента (имена каталогов) и копирует структуру первого в другой.

Это мой код:

cd $1 && find . -type d -exec mkdir -p /$2/{} \;

, когда я запускаю скрипт, я не получаю никаких ошибок, но ничего не происходит. Что я делаю не так, пожалуйста, помогите, спасибо.

edit: скрипт сохраняется в домашних условиях, и оба каталога также находятся в домашних условиях (~). я запускаю скрипт в терминале:

sudo bash DN1c.sh dir1 dir2

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

Ответы [ 2 ]

1 голос
/ 03 апреля 2020

Если целью является относительный путь, ваша команда попадет в бесконечное число l oop. Ниже этой проблемы нет.

find "$1/." -type d -exec bash -c '
mkdir -p "${@/*\/.\//"$0"/}"' "$2" {} +
  • Использует $1/. в качестве начальной точки, так что /./ отмечает, где путь источника заканчивается на каждом пути.
  • Relies на bash 's шаблон подстановки PE; "${@/*\/.\//"$0"/}" заменяет самое длинное совпадение */./ целевым путем в каждом элементе $@ (т.е. выбранные пути) и расширяется до результирующего списка.
  • немного злоупотребляет $0, но выигрывает ' t наносить вред.

Обработка позиционных параметров оставлена ​​на OP.

0 голосов
/ 03 апреля 2020

Вы можете использовать rsyn c для копирования файлов и / или каталогов.

Чтобы копировать только каталоги, установите --max-size=0, и файлы не будут скопированы.

Пример:

rsync -r -n -v --max-size=0 src_path/ dest_path

       ^                                        recursive
          ^                                     dry run - nothing copied
             ^                                  verbose
                     ^                          no files
                              ^                 src path
                                    ^           use a trailing / if you don't 
                                                want the src_path created
                                                at dest
                                           ^    dest path 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...