--w-------
権限が200の一部のファイルを含むディレクトリツリーを含むファイル属性を維持しながら、ディレクトリを繰り返しコピーしたいと思います。
コピーコマンドはcp -ar sourcedirectory targetdirectory
これらのファイルをスキップし、各ファイルは次のようになります。
cp: cannot open `sourcedirectory/foo/somefile.bar' for reading: Permission denied`
私の質問:権限を変更せずにコピーコマンドがこれらのファイルをスキップするのを防ぐにはどうすればよいですか?
cp
コピーコマンド以外のユーティリティを使用する必要があると思う場合は、その理由を説明してください。
答え1
ファイルをコピーするには、ファイルを読み取れるように設定する必要があります。これはツールの選択とは関係ありません。ファイルを読み取る権限がないため、すべてのプログラムがファイルを開いて読み取ることができません。
もしACL有効になっていて(ext2 / ext3 / ext4の場合はマウントオプションが必要ですacl
)、コピーに興味がない場合は、コピーを実行しているユーザーがファイルを読み取ることを許可するACLを追加してください。
setfacl -R -m u:username:rX sourcedirectory
それ以外の場合は、ファイル権限を事前に変更し、後で復元するか(両方とも)ルートにコピーする必要があります。
答え2
このページできるだけ多くのメタデータを維持しながら、データをコピーするさまざまな方法を提供します。それぞれ試してみることができ、rootユーザーとして:
cp -av /source /dest
#使用しないでください-r
。動作を予測するのは難しく、含まれてい-a
ます。-R
cd /source; tar -cf- . | tar -xvpf- -C /dest
cd /source; find . -depth -print0 | cpio -pdmv -0 /dest
rsync -av --delete --hard-links /source/ /dest
/
Rsync は引数に s が続く場合は少しトリッキーです。マニュアルページの説明に従って、両方の方法でディレクトリを次の/source/foo
場所にコピーします/dest/foo
。
rsync ... /source/foo /dest
rsync ... /source/foo/ /dest/foo
これらのどれも機能しないかもしれません。試してみると、最高の視聴者を見つけてください。
答え3
私が知っている限り、以下の手順に従って権限をそのままにしてすべてのファイルをコピーできます。
$ cd <sourcedirectory>
$ tar -cvf <sourcedirectory.tar> .
$ cp <sourcedirectory.tar> <destinationdirectory>
$ tar -xvf <sourcedirectory.tar>