Рекурсивно скопируйте содержимое вложенных папок [закрыто]

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

Вот иллюстрация того, чего я пытаюсь достичь.

Input

source/folder1/src
source/folder2/src
source/folder3/src

Output (Все папки должны содержать содержимое папки src)

dest/folder1
dest/folder2
dest/folder3
0
задан 31 August 2017 в 03:40

3 ответа

Можно использовать for

for d in /path/to/source/*; do echo mkdir /path/to/dest/"$(basename $d)" && echo cp -rvb -- /path/to/source/"$d"/src/* /path/to/dest/"$(basename $d)"; done

при выполнении этого из родительского каталога source и dest можно использовать относительные пути:

for d in source/*; do echo mkdir dest/"$(basename $d)" && echo cp -rvb -- "$d"/src/* dest/"$(basename $d)"; done

После тестирования, удалите echo для фактического копирования файлов

for d in source/*; do mkdir dest/"$(basename $d)" && cp -rvb -- "$d"/src/* dest/"$(basename $d)"; done

Более читаемый...

for d in /path/to/source/*; do 
  echo mkdir /path/to/dest/"$(basename $d)" && 
  echo cp -rvb -- /path/to/source/"$d"/src/* /path/to/dest/"$(basename $d)"
done
5
ответ дан 2 November 2019 в 08:24

С помощью tar:

(cd source; tar c .) | tar x --transform 's:/src::' -C dest
  • cd source; tar c . создает архив tar из каталога source и отправляет его в канал
  • второй tar читает этот архив из канала, затем
  • извлекает его (x) в каталог dest (-C dest),
  • применяет команду sed s:/src:: к результирующий путь (удалить первое вхождение /src в пути)

Предполагается, что фактическое имя каталога sourcefolder1, folder2 и т. д.) не содержит src.

4
ответ дан 2 November 2019 в 08:24

Вам просто нужно добавить -r для копирования всех подпапок и файлов, -r сделает это рекурсивно

cp -r source/folderX/src dest/folderX

0
ответ дан 2 November 2019 в 08:24

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

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