web-dev-qa-db-ja.com

所有者と権限を変更せずにフォルダーをコピーするにはどうすればよいですか?

したがって、次のようにして、ホームフォルダーを外部ドライブにコピーしてバックアップします。

Sudo cp -r /home/my_home /media/backup/my_home

その結果、外付けドライブ上のすべてのフォルダーがroot:root。どうすれば元の所有権と権限をcpに保持できますか?

410
Psachnodaimonia
Sudo cp -rp /home/my_home /media/backup/my_home

Cpマンページから:

 -p     same as --preserve=mode,ownership,timestamps

 --preserve[=ATTR_LIST]
          preserve the specified attributes (default: mode,ownership,timestamps),
          if possible additional attributes: context, links, xattr, all
496
guido

rsyncを使用することもできます。

Sudo rsync -a /home/my_home/ /media/backup/my_home/

rsyncマンページから:

 -a, --archive
              This  is  equivalent  to  -rlptgoD.  It  is a quick way of saying you want
              recursion and want to preserve almost everything (with -H being a  notable
              omission).    The   only  exception  to  the  above  equivalence  is  when
              --files-from is specified, in which case -r is not implied.

              Note that -a does not preserve hardlinks, because finding  multiply-linked
              files is expensive.  You must separately specify -H.

cprsyncの比較については、この質問を参照してください: https://stackoverflow.com/q/6339287/406686

末尾のスラッシュに注意してください(詳細はマンページを参照してください)。

98
student
cp -a

-a--archiveの省略形です。基本的にはディレクトリをそのままコピーします。ファイルはすべての属性を保持し、シンボリックリンクは逆参照されません(-d)。

man cpから:

   -a, --archive
          same as -dR --preserve=all
68
Zaz

私が使う cp -pdRx-p保存モード、所有権とタイムスタンプ、-dリンクを保持します(ファイルの内容をコピーする代わりにシンボリックリンクを取得します)、-R再帰的に実行し、-x 1つのファイルシステムにとどまる(コピーする場合にのみ非常に役立ちます/またはアクティブなマウントポイントを持つ何か)。

PS:-R の代わりに -rls -lR

21
StarNamer

cpには、ファイルの所有権を保持するオプションがあります。 cpのマニュアルページから:

-p    Cause cp to preserve the following attributes of each source file in the copy: modification
      time, access time, file flags, file mode, user ID, and group ID, as allowed by permissions.
      Access Control Lists (ACLs) and Extended Attributes (EAs), including resource forks, will also
      be preserved.
14
Matteo

あなたはこのようなことをすることができます:

tar cf - my_home | (cd /media/backup; Sudo tar xf - )

tarは、権限、所有権、およびディレクトリ構造をそのまま維持しますが、すべてをバイトのストリームに変換します。ディレクトリを変更する「サブシェル」(括弧で囲まれたコマンド)を実行し、tarを取得して変換を逆にします。バイトのSteamは、正しい所有権と権限を持つディレクトリとファイルになります。

12
Bruce Ediger

答えは簡単です:cpには-p許可を保持するオプション(ここに魚があります)。

しかし、Wojtekがコメントで述べているように、man cp(細かいマニュアルを読む)が良い出発点になります(釣り方を学びたいですか?)。

8
buckdeer

preserve = allを使用すると、コピーはファイルの所有者、グループ、タイムスタンプなどのすべての属性を保持します。したがって、次のコマンドを使用して安全にバックアップを実行してください。

cp -r --preserve=all /home/my_home /media/backup/my_home
3
Majid Zarrin