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

Вы можете установить Cinnamon, который больше похож на рабочий стол Windows. Используйте эти шаги для его установки.

0
задан 31 August 2017 в 13:40

6 ответов

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

cp -r source/folderX/src dest/folderX

0
ответ дан 18 July 2018 в 07:39

С 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 в пути)

Это предполагает, что фактическое имя каталога source (и имя folder1, folder2 и т. д.) не содержит src.

4
ответ дан 18 July 2018 в 07:39

Вы можете использовать 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
ответ дан 18 July 2018 в 07:39

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

cp -r source/folderX/src dest/folderX

0
ответ дан 24 July 2018 в 18:50
  • 1
    folderX не исправлена ​​в моем случае. Я хочу скопировать все папки в исходном рекурсивном виде и это не будет иметь фиксированного префикса. – Rajkeshwar Prasad 31 August 2017 в 09:38

С 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 в пути)

Это предполагает, что фактическое имя каталога source (и имя folder1, folder2 и т. д.) не содержит src.

4
ответ дан 24 July 2018 в 18:50

Вы можете использовать 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
ответ дан 24 July 2018 в 18:50

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

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