web-dev-qa-db-ja.com

cpはファイルのメタデータを失います

Linuxで動作するAsustor NASがあります。どのディストリビューションを使用しているかわかりません。

SSHを使用してログインし、すべてのシェルコマンドを使用できます。内部ボリュームはext2を使用し、外部USB HDはNTFSを使用します。

cpコマンドを使用してファイルをコピーしようとすると、そのファイルの日付メタデータが現在の日時に変更されます。

たとえば、Windowsを使用してSMB=からファイルをコピーし、ファイルが2007年に変更された場合、新しいファイルは2017年に作成され、2007年に変更されたものとしてマークされます。ただしLinuxではcpコマンドの変更日も2017年に変更されました。

この変更日を使用すると、Windowsエクスプローラーでファイルを変更日で並べ替えることができるため、私には非常に関連があります。オーバーライドされている場合、ソートできず、すべて作成されたようです。私はまた、いくつかのまれな古いファイルをいつ取得したかを知るために変更日を使用します。

cpコマンドで元のファイルのメタデータを保持するために使用できるパラメーターはありますか?

アップデート:cp --preserve=timestampsが機能しませんでした。

cp: unrecognized option '--preserve=timestamps'
BusyBox v1.19.3 (2017-03-22 17:23:49 CST) multi-call binary.

Usage: cp [OPTIONS] SOURCE DEST

Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY

        -a      Same as -dpR
        -R,-r   Recurse
        -d,-P   Preserve symlinks (default if -R)
        -L      Follow all symlinks
        -H      Follow symlinks on command line
        -p      Preserve file attributes if possible
        -f      Overwrite
        -i      Prompt before overwrite
        -l,-s   Create (sym)links

-pと書いてありますcp: can't preserve permissions of '...': Operation not permitted、しかし私がテストした限りでは、タイムスタンプは保持されています。

6
Hikari

man cpを使用してコピーコマンドのマニュアルページを読むと、-p and --preserveフラグが見つかります。

-p--preserve=mode,ownership,timestampsと同じ

そして

--preserve[=ATTR_LIST]指定された属性(デフォルト:mode,ownership,timestamps)を保持します。可能な場合、追加の属性:contextlinksxattrall

つまり、cpの代わりにcp -pを使用する必要があります。

11
roaima

指摘する価値のある所見がいくつかあると思います。

使用しているディストリビューションは不明であると言いましたが、アップデートには、ディストリビューションがBusyBox v1.19.3であることを示す出力が含まれています。 Asustor NAS開発者ガイド を見ると、問題のOSが BusyBox であることが確認できます。

@ roaimaが投稿した回答 は、cpコマンドのmanページを引用しています。これは一般的に理にかなっていますが、この場合は多分そうではありません。

BusyBoxは、組み込みデバイス用に設計された最小限のLinux OSであり、ほとんどの人がおそらく慣れているより人気のあるLinuxフレーバーとは少し異なる環境です。特に、NASにはmanページがない可能性があり、コマンドの機能、動作、および構文が若干異なる場合があります。BusyBoxのドキュメントは次のとおりです。

そして、BusyBoxのcpコマンドのエントリは次のとおりです。

cp

cp [OPTIONS] SOURCE DEST

Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY

Options:

        -a      Same as -dpR
        -d,-P   Preserve links
        -H,-L   Dereference all symlinks (default)
        -p      Preserve file attributes if possible
        -f      Force overwrite
        -i      Prompt before overwrite
        -R,-r   Recurse
        -l,-s   Create (sym)links

-pオプションフラグはまだ存在しており、通常と同じセマンティクスを持っていますが、よりフル機能のディストリビューションで使用できるより柔軟な構文はありません。

--preserve[=ATTR_LIST]

これは、--preserveフラグを指定してcpコマンドを実行しようとしたときに表示される使用方法メッセージと一致しています。

-pフラグが機能していないというので、-pフラグなしでファイルをコピーし、touchコマンドを使用して、変更時間、例:

root@busybox:~# cp original_file new_file
root@busybox:~# touch -r original_file new_file

これが機能しない場合は、質問を更新して、表示されるエラーメッセージを含めることができます。コピーしようとしているファイルのプロパティ、コピー元とコピー先の場所、実行しているユーザー、正確なコマンドを含めるように質問を更新することもできます再使用、およびこれらのコマンドを実行するときのようにログインしているユーザー。

とは言っても、マウントされたボリューム間でコピーしていて、ファイルの所有者が一方のボリュームに存在し、もう一方(またはそれに似たもの)に存在しないため、cp -pコマンドが権限関連のエラーを生成している可能性があります。

1
igal