URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID15
Нить номер: 1932
[ Назад ]

Исходное сообщение
"рекурсивное копирование без замены"

Отправлено Stonecold , 18-Апр-08 13:00 
ситуация: есть некоторые рабочие данные - каталог с кучей файлов/подкаталогов, гигов на 50. есть архив этих же данных месячной давности. разница между ними - в текущем рабочем каталоге нету некоторых файлов (в разных подкаталогах, немного, но общее количество сложно определить); в архиве эти файлы есть.
как рекурсивно скопировать содержимое архива поверх текущих данных _без замены_? т.е. чтоб скопировались только отсутствующие файлы?

если тупо копировать архивную папку поверх текущей в konqueror'е - там либо замена всех данных (а это нельзя - рабочие данные с момента архивации уже изменились), либо пропуск - но тогда он внутрь папки даже не заглядывает, не сравнивает содержимое.
cp -R -u - тоже неканает, ибо после разархивирования "архивная" копия данных получается новее рабочей (даты создания/модификации заменяются на текущую дату/время).

прошу помощи :) задачка может и простая, но из-за частоупотребляемости ключевых слов - искать в инете решение практически нереально


Содержание

Сообщения в этом обсуждении
"рекурсивное копирование без замены"
Отправлено angra , 19-Апр-08 15:35 
Можно конечно поискать нужную опцию у архиватора, но ее может и не быть. Я бы сделал так:

1. получаем список файлов в архиве(для gnu tar это -t, для остальных смотрите man), пропускаем через sort  и сохраняем в файл
2. получаем список файлов в нужной директории через find/locate, также сортируем и записываем в другой файл
3. сравниваем два файла при помощи comm и получаем список файлов, подлежащих экстракции, записываем его в файл и скармливаем архиватору(для gnu tar это -T)


"рекурсивное копирование без замены"
Отправлено shutdown now , 25-Апр-08 00:15 
>[оверквотинг удален]
>
>если тупо копировать архивную папку поверх текущей в konqueror'е - там либо
>замена всех данных (а это нельзя - рабочие данные с момента
>архивации уже изменились), либо пропуск - но тогда он внутрь папки
>даже не заглядывает, не сравнивает содержимое.
>cp -R -u - тоже неканает, ибо после разархивирования "архивная" копия данных
>получается новее рабочей (даты создания/модификации заменяются на текущую дату/время).
>
>прошу помощи :) задачка может и простая, но из-за частоупотребляемости ключевых слов
>- искать в инете решение практически нереально

тупо rsync заюзать


"рекурсивное копирование без замены"
Отправлено angra , 25-Апр-08 00:43 
Единственное в чем вы правы - заюзать rsync будет тупо. Зачем правда советовать тупые методы непонятно.

"рекурсивное копирование без замены"
Отправлено GreatFoolDad , 29-Апр-08 13:07 
А tar-овская опция "k" не спасет отца русской демократии?

типа

tar xkvf pppoe.tar

распакует все файлы, кроме имеющихся.
на имеющиеся обругается File exist

Вроде и временные атрибуты будут оригинальные.



"рекурсивное копирование без замены"
Отправлено Stonecold , 29-Апр-08 13:56 
всем спасибо за ответы, по началу склонялся к варианту angra, но потом нашел как распаковать бэкап с сохранением mtime (акронисовский архив) - проблема отпала сама сабой - cp -R -u справился.