Измените формулу от, скажем, =A1/A2
кому: =A1/$A$2
прежде, чем скопировать его, так, чтобы знаменатель не изменялся.
Замена cp -ur
с rsync -urvv
.
Два "v"-s нет опечатки: они там для увеличенного многословия, для показа файлов, которые были пропущены.
Пропущенные файлы будут похожи the_filename is newer
, таким образом для получения списка пропущенных файлов можно использовать эту остроту:
rsync -urvv source/ target | grep ' is newer$' | sed -e 's/ is newer$//'
Или если Вы будете использовать его в интерактивном режиме --progress
флаг может быть очень полезным.
Я не думаю, что существует способ иметь cp
сделайте это непосредственно, но это должно сделать по существу то же самое:
cp -vu file destination | awk '{ gsub("[`\x27]", "", $1); print $1 } END { if (NR == 0) print "NOFILES" }' | xargs -I{} find . ! -name {} -maxdepth 1
Эта небольшая острота идет с некоторыми ограничениями:
1) Это зависит от там того, чтобы не быть любыми файлами под названием "NOFILES". Можно поменять ту струну в awk
управляйте к комплекту своими потребностями.
2) Необходимо быть в каталоге где file
существует. Если Вы не находитесь в том каталоге, необходимо измениться find
команда, чтобы быть find dirWhereFileExists
вместо find .
Если Вы не копируете с единственного каталога, можно использовать find dir1 dir2...
вместо этого.
3) Это не будет работать, если у Вас по некоторым причинам будут обратные галочки или одинарные кавычки в Ваших именах файлов.
Поскольку можно сказать, что это не большая часть надежного решения, но оно должно сделать для одноразовой операции.
Править
Я проснулся этим утром и понял, что вышеупомянутым решением был мусор. Если бы Вы пытались скопировать несколько файлов, то это искало бы так много раз, как у Вас есть файлы, исключая один файл каждый раз. Следующее решение, однако, должно работать:
cp -vu file destination | awk '{ gsub("[`\x27]", "", $1); regex = $1 "|" regex } END { if (NR == 0) { regex = "NOFILES|" } print ".*/("substr(regex, 0, length(regex))")" }' | xargs -I{} find . -regextype posix-extended ! -regex {} -maxdepth 1
Это создает regex, когда это идет и передачи это к find
вместо этого. Те же ограничения как выше применяются.
Извините за заскок ранее. Угадайте, что было слишком поздно, чтобы быть на StackOverflow.
rsync сделал бы задание для Вас? Это имеет много опций, которые соответствуют Вашему описанию, говорят, "не перезаписывают более новые файлы" и такой. И у Вас может быть он результаты журнала. Я часто использую его для удаленного И локального копирования файла.
Можно стать очень детализированными с ним также.
Удачи.
rsync
. – Tim Pote 22.04.2012, 17:24