Есть ли способ проверить, будет ли `cp -r` перезаписывать что-нибудь? - PullRequest
0 голосов
/ 01 января 2019

Есть ли способ проверить, будет ли cp -r перезаписывать что-либо, на самом деле ничего не копируя?

-n, кажется, копирует файлы, которые не сталкиваются, а это не то, что я хочу.

Ответы [ 3 ]

0 голосов
/ 01 января 2019

cp имеет опцию -i --interactive и опцию -n, --no-clobber.Смотрите "man 1 cp".

0 голосов
/ 02 января 2019

Чтобы только проверить, существует ли файл в целевом местоположении, но на самом деле не выполнять копирование, вы можете использовать команду diff с параметром -r.

С man diff:

-r, --recursive
рекурсивно сравнивает любые найденные подкаталоги

diff -r --brief --report-identical-files /source-folder/ /target-folder/ | grep -v '^Only in'
  • --brief выводит список файлов, которые отличаются (так же, как -q)
  • --report-identical-files делает то же самое для файлов, которые не отличаются (так же, как -s)
  • grep -v '^Only in' удаляет файлы, которые находятся только в одном дереве каталогов, потому что они не будутперезаписать.

Вывод будет выглядеть примерно так:

Files /source-folder/file1.txt and /target-folder/file1.txt are identical
Files /source-folder/file2.jpg and /target-folder/file2.jpg differ
0 голосов
/ 01 января 2019

Самый простой способ - использовать команду rsync, если у вас есть много параметров для переопределения цели или удаления файлов на цели, если хотите.

https://linux.die.net/man/1/rsync

или как упомянуто в комментариях, вы можете использовать cp -n для --no-clobber.Но в целом я хотел бы предложить Rsync там у вас гораздо больше возможностей.

...