Как скопировать файл и сохранить структуру каталогов?

На самом деле это единственный раздел про unix на этом форуме

Модератор: /dev/random

Kreept
Сообщения: 107
ОС: Linux

Как скопировать файл и сохранить структуру каталогов?

Сообщение Kreept » 11.03.2010 22:01

Добрый вечер.

Уже замаялся, извините может и вопрос банальный, но не могу найти как реализовать. Нужно скопировать файл с одной директории в другую и сохранить структуру папок. К примеру:

PATH1=/dir1
PATH2=/dir2

cp $PATH1/dir3/dir4/.../dir10/file1 $PATH2/

Как скопировать file1 в директорию PATH2 и сохранить структуру каталогов. Чтобы получилось $PATH2/dir3/dir4/.../dir10/file1.

Спасибо сказали:

BIgAndy
Сообщения: 1923

Re: Как скопировать файл и сохранить структуру каталогов?

Сообщение BIgAndy » 11.03.2010 22:12

Kreept писал(а):
11.03.2010 22:01
Уже замаялся, извините может и вопрос банальный, но не могу найти как реализовать.

man cp на пердмет опции -r и -R
или rsync
Спасибо сказали:

Аватара пользователя
/dev/random
Администратор
Сообщения: 4824
ОС: Gentoo

Re: Как скопировать файл и сохранить структуру каталогов?

Сообщение /dev/random » 11.03.2010 22:16

Kreept писал(а):
11.03.2010 22:01
Добрый вечер.

Уже замаялся, извините может и вопрос банальный, но не могу найти как реализовать. Нужно скопировать файл с одной директории в другую и сохранить структуру папок. К примеру:

PATH1=/dir1
PATH2=/dir2

cp $PATH1/dir3/dir4/.../dir10/file1 $PATH2/

Как скопировать file1 в директорию PATH2 и сохранить структуру каталогов. Чтобы получилось $PATH2/dir3/dir4/.../dir10/file1.

1)

Код: Выделить всё

pathcp() {
  local P1="$1"
  local P2="$2"
  shift 2
  for file; do
    mkdir -p "$P2/$(dirname "$file")" && cp "$P1/$file" "$P2/$file"
  done
}

2)

Код: Выделить всё

pathcp() {
  local P1="$1"
  local P2="$2"
  shift 2
  tar cC "$P1" "$@" | tar xC "$P2"
}


BIgAndy писал(а):
11.03.2010 22:12
man cp на пердмет опции -r и -R
или rsync

Это хорошо использовать, если нужно скопировать _весь_ каталог, а не 1-2 файла.
Спасибо сказали:

watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Как скопировать файл и сохранить структуру каталогов?

Сообщение watashiwa_daredeska » 11.03.2010 22:25

/dev/random писал(а):
11.03.2010 22:16
tar cC "$P1" "$@" | tar xC "$P2"
Я предпочитаю для этих целей cpio:

Код: Выделить всё

cd "$PATH1"; echo dir3/dir4/.../dir10/file1 | cpio -p --make-directories "$PATH2"
Можно сколько угодно файлов в cpio загнать.
Спасибо сказали:

smaharbA
Сообщения: 229
ОС: Windows Vista

Re: Как скопировать файл и сохранить структуру каталогов?

Сообщение smaharbA » 11.03.2010 22:34

Код: Выделить всё

f=dir3/dir4/.../dir10/file1; install -D $PATH1/$f $PATH2/$f
Я конечно далек от мысли...(с)
Спасибо сказали:

Kreept
Сообщения: 107
ОС: Linux

Re: Как скопировать файл и сохранить структуру каталогов?

Сообщение Kreept » 11.03.2010 22:40

/dev/random писал(а):
11.03.2010 22:16
Kreept писал(а):
11.03.2010 22:01
Добрый вечер.

Уже замаялся, извините может и вопрос банальный, но не могу найти как реализовать. Нужно скопировать файл с одной директории в другую и сохранить структуру папок. К примеру:

PATH1=/dir1
PATH2=/dir2

cp $PATH1/dir3/dir4/.../dir10/file1 $PATH2/

Как скопировать file1 в директорию PATH2 и сохранить структуру каталогов. Чтобы получилось $PATH2/dir3/dir4/.../dir10/file1.

1)

Код: Выделить всё

pathcp() {
  local P1="$1"
  local P2="$2"
  shift 2
  for file; do
    mkdir -p "$P2/$(dirname "$file")" && cp "$P1/$file" "$P2/$file"
  done
}

2)

Код: Выделить всё

pathcp() {
  local P1="$1"
  local P2="$2"
  shift 2
  tar cC "$P1" "$@" | tar xC "$P2"
}


BIgAndy писал(а):
11.03.2010 22:12
man cp на пердмет опции -r и -R
или rsync

Это хорошо использовать, если нужно скопировать _весь_ каталог, а не 1-2 файла.


Спасибо!!!!! То что доктор прописал.

Как раз задача стоит в копирование 1-2 файлов. Выбрал вариант с использованием tar, так как путь к файлу передается в переменой VAR=dir3/dir4/.../dir10/file1



Спасибо сказали:

BIgAndy
Сообщения: 1923

Re: Как скопировать файл и сохранить структуру каталогов?

Сообщение BIgAndy » 11.03.2010 22:44

/dev/random писал(а):
11.03.2010 22:16
Это хорошо использовать, если нужно скопировать _весь_ каталог, а не 1-2 файла.

Как скопировать file1 в директорию PATH2 и сохранить структуру каталогов

или файлы, содержащиеся в "каталогах" не составляют структуру "каталогов"?
Спасибо сказали:

smaharbA
Сообщения: 229
ОС: Windows Vista

Re: Как скопировать файл и сохранить структуру каталогов?

Сообщение smaharbA » 11.03.2010 22:46

БигАнди не отмазывайся
Я конечно далек от мысли...(с)
Спасибо сказали:

Kreept
Сообщения: 107
ОС: Linux

Re: Как скопировать файл и сохранить структуру каталогов?

Сообщение Kreept » 11.03.2010 22:50

cpio и install, тоже супер.

Всем спасибо, не ожидал что так быстро получу, столько полезных ответов.
Спасибо сказали:

smaharbA
Сообщения: 229
ОС: Windows Vista

Re: Как скопировать файл и сохранить структуру каталогов?

Сообщение smaharbA » 11.03.2010 23:04

хотя БигАнди и близок был

cp --parents $PATH1/$f $PATH2

но как понимаю с версии 4 гну, в бсд нет такого..
Я конечно далек от мысли...(с)
Спасибо сказали:

Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux

Re: Как скопировать файл и сохранить структуру каталогов?

Сообщение eddy » 12.03.2010 01:46

smaharbA писал(а):
11.03.2010 23:04
cp --parents $PATH1/$f $PATH2

Точнее --parent
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали: