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 .
コピーは非常に正常に行われます。