То, что Вы делаете, является по существу инкрементным резервным копированием: у Вашего друга (Ваше резервное копирование) уже есть исходные файлы, и Вы хотите сделать архив, содержащий файлы, которые Вы изменили из того оригинала.
Rsync имеет функции возрастающих резервных копий.
cd ORIGINAL_AND_MY_CHANGED
rsync -a -c --compare-dest=../ORIGINAL . ../CHANGES_ONLY
-a
средства сохранить все атрибуты (времена, владение, и т.д.).-c
средства сравнить содержание файла и не полагаться на дату и размер.--compare-dest=/some/directory
средства, что файлы, которые идентичны в соответствии с тем каталогом и исходным деревом, не копируются. Обратите внимание, что путь относительно целевого каталога.Rsync копирует все каталоги, даже если никакие файлы не заканчиваются там. Для избавлений от этих пустых каталогов работать find -depth CHANGES_ONLY -type d -empty -delete
(или если Ваш find
не имеет -delete
и -empty
, выполненный find -depth CHANGES_ONLY -exec rmdir {} + 2>/dev/null
).
Затем сделайте архив из CHANGES_ONLY
каталог.
Пересеките каталог со своим файлом. Пропустите файлы, которые идентичны с оригиналом. Создайте каталоги в цели по мере необходимости. Скопируйте измененные файлы.
cd ORIGINAL_AND_MY_CHANGES
find . \! -type d -exec sh -c '
for x; do
if cmp -s "$x" "../ORIGINAL/$x"; then continue; fi
[ -d "../CHANGES_ONLY/$x" ] || mkdir -p "../CHANGES_ONLY/${%/*}"
cp -p "$x" "../CHANGES_ONLY/$x"
done
' {} +
То, что продолжается, - то, что парсинг командной строки терминала гнома бросок. Вы работаете mplayer
с /home/ferer/gdr01.wav
, 2>&1
, |tee
и /home/ferer/junk.log
как аргументы. Если Вы будете ожидать конца звукового файла, то Вы будете видеть сообщения об ошибках об этих несуществующих файлах в течение микросекунды, прежде чем терминал закроется.
Сложное правило терминала гнома любой фигуры. Или, что я рекомендую: yse -x
опция вместо -e
и вызовите оболочку явно.
gnome-terminal -x sh -c 'mplayer "$HOME/gdr01.wav" 2>&1 |tee $HOME/junk.log'
gnome-terminal -x mplayer $HOME/gdr01.wav 2>&1 |tee $HOME/junk.log &
Эта команда, по крайней мере, создает файл журнала.
-x
по сравнению с -e
). Проблема состоит в том, что это производит журнал вывода терминала, но не какой mplayer
выводы.. Это дает 1 строку в журнале ( ibus
предупреждение). Это то же сообщение появляется в журнале, не запускаясь mplayer
, например. gnome-terminal 2>&1 |tee $HOME/junk.log &
... вывод mplayer является тысячами строк долго (хотя это появляется на экране, поскольку возвращение наложило строку); это генерирует приблизительно 4-5 строк в секунду, но они не заканчивают в журнале.
– Peter.O
25.11.2011, 02:25
Я попытался бы поместить exec
перед mplayer
, так как это выполняет его на другой оболочке.
bash
, но при запуске как аргумент кgnome-terminal
его родительgnome-terminal
... таким образом, я добавил 'удар-c', и он работал.. Я не вполне понимаю почему.. Случается так, что этот слой непосредственного родителя необходим для обработки io-перенаправления? Я предполагаю, что это-... – Peter.O 25.11.2011, 04:20-e
,gnome-terminal
делает его собственный неопределенно подобный оболочке парсинг аргумента (в простых случаях, он разделяет в пробелах, но это не все, что он делает), но на самом деле не вызывает оболочку. С-x
,gnome-terminal
вызывает данную программу с точно данными аргументами. – Gilles 'SO- stop being evil' 25.11.2011, 04:28gnome-terminal -x sh -c 'mplayer "$1" 2>&1 |tee "$2"' 0 "$aud" "$log"
...0
просто заполнитель для того, что обычно$0
. Два args, которые следуют0
1$ и 2$.. (0
может быть тем, что Вы любите)... – Peter.O 25.11.2011, 09:29