Повторно скопировать каталог с определенным именем в новую структуру с сохранением местоположения - PullRequest
2 голосов
/ 30 сентября 2019

Похоже, это было бы где-то решено ранее, но я не могу найти его. Нашел это, но --parents, похоже, не работает на MacOS.

Копирование части структуры каталогов в новое место

Я пытаюсь скопироватьпапка с заданным именем и ее содержимое в новом месте с сохранением структуры папки.

Пример ... копия results из src в dest

src\ --
   folder1\ --
      file1.txt
      file2.txt
      file3.txt
      results\ --
         results1.txt
         results2.txt
   folder2\ --
      file1.txt
      file2.txt
      file3.txt
      results\ --
         results1.txt
         results2.txt
   folder3\ --
      file1.txt
      file2.txt
      file3.txt
      results\ --
         results1.txt
         results2.txt

I 'Я хотел бы закончить с этим

dest\ --
   folder1\ --
      results\ --
         results1.txt
         results2.txt
   folder2\ --
      results\ --
         results1.txt
         results2.txt
   folder3\ --
      results\ --
         results1.txt
         results2.txt

Ответы [ 2 ]

2 голосов
/ 30 сентября 2019

Если вы находитесь в каталоге src и папка dest существует, вы можете запустить следующее, чтобы рекурсивно скопировать все каталоги и подкаталоги в dest. Если dest не существует, создайте его перед запуском цикла.

for dir in *
do   
  if [ -d $dir ]
  then    
    mkdir ../dest/$dir
    for subdir in $dir/*
    do  
      if [ -d $subdir ]
      then      
        cp -r $subdir ../dest/$subdir
      fi     
    done
  fi
done
0 голосов
/ 01 октября 2019

В MacOS, которая не поддерживает параметр --parents команды cp, вы сможете использовать команду ditto в качестве альтернативы.
Пожалуйста, попробуйте:

mkdir -p dest
cd src
find . -type d -mindepth 2 | xargs -I ditto {} ../dest

, которыйбудет эквивалентно:

mkdir -p dest
cd src
find . -type d -mindepth 2 | xargs -I cp -a -P {} ../dest

, если доступна опция --parents или -P.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...