web-dev-qa-db-ja.com

ファイルをコピーして宛先ディレクトリの許可を与える方法

ソースから場所にファイルをコピーしています。ソースの所有者は私ではなく、ソースでのファイルの許可は---- rwx ---です。私が所有する宛先ディレクトリにコピーされたファイルの許可は---- r-x ---です。宛先ディレクトリーの許可はdrwxrwsrwxです。宛先ディレクトリと同じ権限を持つファイルを入手するにはどうすればよいですか。 「cp --no-preserve = all」を試してみましたが、機能しませんでした(同じ権限です)。

10
Nasreddin

これを試して:

cp --no-preserve=mode,ownership $backupfile $destination
13
Giordano

「コピー先のディレクトリのアクセス権を保持する方法」に言い換えてみましょう。
野生で見つけた2、3の回答を組み合わせただけなので、回答を信用できません。だからここに来る。

まず

アクセス許可は通常、ファイルのコピー先のディレクトリによっては伝達されません。新しいアクセス許可は、ユーザーのumaskによって制御されます。ただし、ある場所から別の場所にファイルをコピーする場合は、ユーザーのumaskが基本的に無視され、ファイルに対する既存のアクセス許可が保持されるという特殊なケースになります。

これは、直接srcの権限をdstディレクトリ。

ただし、これには2段階の回避策があります。

  1. cp-metadata :保存したい属性と保存したい属性のみをコピーして、ソースディレクトリに戻します。これを行うことができる簡単なスクリプトを次に示します。
#!/bin/bash
# Filename: cp-metadata

myecho=echo 
src_path="$1"  
dst_path="$2"

find "$src_path" |
  while read src_file; do
    dst_file="$dst_path${src_file#$src_path}"
    $myecho chmod --reference="$src_file" "$dst_file"
    $myecho chown --reference="$src_file" "$dst_file"
    $myecho touch --reference="$src_file" "$dst_file"
  done

タイムスタンプを保持したくない場合は、touchコマンドを省略できます。置換myecho=echomyecho=実際にコマンドを実行します。
_Sudochownを効果的に実行できるようにするには、このスクリプトをchmodモードで実行する必要があることに注意してください

  1. cp --preserve:最初のコマンドを正常に実行した後、コンテンツと属性をdstディレクトリにコピーします。

    --preserve [= ATTR_LIST]
    指定された属性(デフォルト:モード、所有者、タイムスタンプ)を保持します。可能な場合、追加の属性:コンテキスト、リンク、xattr、すべて

    \cp -rfp $src_dir $dst_dirはあなたがやりたいことをするべきです。

1
laertis