cp -uを使用しますが、内容が異なる場合にのみ使用してください。

cp -uを使用しますが、内容が異なる場合にのみ使用してください。

cp -uコンテンツが異なる場合にのみコピーを使用する方法、次の操作を実行すると失敗します。

$ cd /tmp/exper ; cp -v ~/Downloads/C/test.c . ; sudo chmod -R 777 . 
/home/budi/Downloads/C/test.c -> 'test.c'
$ cp -v -u test.c ~/Downloads/C
'test.c' -> '/home/budi/Downloads/C/test.c

内容は同じですがsudo chmod -R 777 .

これを正しく行う方法は?

答え1

cd /tmp/exper ; cp -v ~/Downloads/C/test.c .

cp -u内容はまったく確認しないでください!

確認する最終修正日。ソースファイル(~/Downloads/C/test.c)がターゲットファイル()よりも最新の場合/tmp/exper/test.cにのみコピーが発生します。

(しかし、表示されるコマンドは貼り付けた出力と一致しません。そこでsudo chmod -R 777 .実行される操作は明確ではありません。)

cpしかし、ここに問題はありません。印刷されたという事実は、sourcefile -> targetfileこのファイルが印刷されたという意味ではありません。持つコピーされた、ちょうどコピーされたコピーを検討してください

答え2

@MarcusMüller が指摘したように、cp -u内容ではないファイル修正日を確認し、ソースがターゲットよりも最新であるか、ターゲットが存在しない場合にのみコピーしてください。

'A' -> 'foobar/A'これにより、\cp -uv A foobar/次の事実のコピーが得られます。起こった。これはDebianシリーズシステムの通常の動作です。疑う他のほとんどのLinuxディストリビューションでは(BSDとOSXでは動作が異なる場合があります)、もしそうなら、なぜこれが起こるのでしょうか?

これを行うと、\cp -uv A foobar/新しく作成されたまたはコピーされたfoobar/Aコンテンツが.より小さいため、逆方向のAコピー操作を実行することにした場合、\cp -uv foobar/A .コピーは非常に正常に行われます。

関連情報