Я хочу скопировать содержимое папок src
в новые каталоги в другом месте, которые имеют имена родительских каталогов исходных каталогов src
.
Вот иллюстрация того, чего я пытаюсь достичь.
Input
source/folder1/src
source/folder2/src
source/folder3/src
Output (Все папки должны содержать содержимое папки src
)
dest/folder1
dest/folder2
dest/folder3
Можно использовать 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
С помощью 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
.
Вам просто нужно добавить -r для копирования всех подпапок и файлов, -r сделает это рекурсивно
cp -r source/folderX/src dest/folderX