С ударом, zsh и ksh ProcessSubstitution:
while IFS= read -r line; do
echo "$line"
done < <(p4 opened -c $changelist)
См. http://mywiki.wooledge.org/ProcessSubstitution и http://mywiki.wooledge.org/BashFAQ/024
Не используя одну из этих оболочек (как Joseph R. сказал в комментариях), используйте простой канал:
p4 opened -c $changelist | while IFS= read -r line; do
echo "$line"
done
Rsync не может делать это на уровне отдельных файлов, но в некоторой степени поддерживает создание целых деревьев. Например.:
/path/to/dst-2019-07-31/file
/path/to/dst-2019-07-30/file
/path/to/dst-2019-07-29/file
...
Есть три варианта:
--compare-dest=DIR
где в новом каталоге создаются только новые файлы. Вероятно, это не то, что вам нужно, потому что вам придется перечислить все каталоги предыдущей версии. --copy-dest=DIR
, где неизмененные файлы копируются из DIR
в место назначения, а не передаются из источника. --link-dest=DIR
— то же самое, но использует гораздо меньше дискового пространства в месте назначения, поскольку не дублирует содержимое файла. Вы используете это так:
rsync -a --link-dest=/path/to/dst-$YESTERDAY /path/to/src /path/to/dst-$TODAY
На самом деле можно, но как-то халтурно.. и только как суффикс.
Как вы прочитали в комментариях, --suffix
предназначен для резервного копирования перезаписанных файлов. Таким образом, вы выполняете rsync одни и те же файлы из источника в пункт назначения, заставляя rsync перезаписывать (-I
)-, но только если исходный файл(-u
)новее (, чего никогда не бывает ), и используя параметр -b, --backup
и определяя резервный каталог и суффикс.
rsync -Iu --backup --suffix='_2015_09_10' --backup-dir=/path/to/dst /path/to/src/file /path/to/src/file