すべてのファイル/ディレクトリ属性を別のファイル/ディレクトリに複製/コピーする方法は?


14

あるディレクトリの属性(所有権、グループ、ACL、拡張属性など)を別のディレクトリにコピーしたいが、ディレクトリの内容自体はコピーしたくない。

これは動作しません:

cp -v --attributes-only A B
cp: omitting directory `A'           

注:である必要はありませんcp


1
を渡さなかった-rため、ディレクトリを無視しています。しかし、内容ではなく属性のみをコピーしたいのでしょうか?いハックしか考えられません。また、installSELinuxコンテキストを保持できることに注意してください。
lynxlynxlynx


1
@Gilles、別のトピックを指摘してくれてありがとう。問題の一部である所有権とモードを解決します。拡張属性はどうですか?
グジェゴシWierzowiecki

1
@GrzegorzWierzowiecki拡張属性をサポートするツールはほとんどありません。それらが重要な場合は、killermistのrsyncの提案を使用してください。
ジル「SO-悪であるのをやめる」

ところで 以下に、xattrsの動作を確認できる素敵な例を示します:KDEのDolphinのGUI:imgur.com/oguuJNmまたはブラウザがファイルをダウンロードした場所からのURL:参照:gist.github.com/gwpl/a00e18bc150f1e3518335d13c5e46ad7 + freedesktop.org/ wiki / CommonExtendedAttributes + vhanda.in/blog/2014/07/tagging-your-files
Grzegorz Wierzowiecki

回答:


13

コマンドラインでかなりの試行錯誤の後、私は答えを見つけたと思います。しかし、それはcp関連する答えではありません。

rsync -ptgo -A -X -d --no-recursive --exclude=* first-dir/ second-dir

これは:

-p, --perms                 preserve permissions
-t, --times                 preserve modification times
-o, --owner                 preserve owner (super-user only)
-g, --group                 preserve group
-d, --dirs                  transfer directories without recursing
-A, --acls                  preserve ACLs (implies --perms)
-X, --xattrs                preserve extended attributes
    --no-recursive          disables recursion

参考のために

    --no-OPTION             turn off an implied OPTION (e.g. --no-D)
-r, --recursive             recurse into directories

その最後の編集は間違いなくヒットです。second-dirに/を付けても付けなくても、最終的に要求されたとおりになります。
キラーミスト

末尾のスラッシュは、2番目の引数ではなく、最初の引数でのみ違いを生じます。これUSAGEは、rsync(1)manページのセクションの3番目または4番目の段落で説明されています。
jw013

@ jw013数か月前にrsyncのドキュメントを繰り返し読んだ後、私の結論は、最初の引数(2番目、3番目など)であろうと最後の引数であろうと、末尾のスラッシュは暗黙の「into」であるということでした。しかし、再び、最後の引数に/を付けてコマンドを終了し、「イント」効果を示唆/要求します。
キラーミスト

すべてのディレクトリ属性をコピーして、通常のファイルをコピーしないという私の直感はrsync -a -AX --include='*/' --exclude='*'。私はテストしていません。
ジル「SO-悪であるのをやめる」

@ jw013この回答のダイヤルインを手伝ってくれてありがとう。小さなサンドボックステスト環境で非常に多くのオプションを試しましたが、近づき続けましたが、一部が正しく動作しませんでした。
キラーミスト

0
chmod --reference=first-dir second-dir

2
これは再帰的に機能せず、ACLまたは拡張属性をコピーしません。
マット

1
再帰的であるとは想定されていません。OPは「ディレクトリの内容ではなく」を要求し、受け入れられた答えはrsyncに伝え--no-recursiveます。この答えの問題は、ACLまたはXATTRを実行しないことです。
ShadSterling


0

他の人にはうまくいくようですが、FreeBSDのZFSではrsyncメソッドが失敗します。何も起こりません。ただし、Jean-FrançoisDockesの方法は機能します。(参照:https : //www.lesbonscomptes.com/pxattr/)元の質問からのソースディレクトリ= Aおよび宛先ディレクトリ=B。

pxattr -lR A > tmp.EAs

(tmp.EAsの最初の行を編集して、AディレクトリをB、s / A / B /に変更します)

pxattr -S tmp.EAs

したがって、他の人の方法を推奨するだけではありませんあなたは誰か他の人の推薦しているプログラムを右?大丈夫ですが、あまり知られていない非標準プログラムのドキュメントを検索するのに5分も無駄にしただけです。人々があまり知られていない非標準のプログラムをダウンロードすることを推奨していることをより明確に述べればいいでしょう。
G-Manが「Reinstate Monica」と言う

肩をすくめる ポートツリーにあります。それは正確にそれを非標準にするわけではありません。それはそれほど曖昧ではなくpyxattr、私もそれを試しました。これは割れにくい種類のナットでした。おそらくgnu cpがこのために機能しますが、私はそれを成功させることはできません。拡張属性はこれよりも価値があります。また、pxattrは少なくともlinux、osx、およびbsdで動作します。
cira

0
rsync -aAX --exclude='*' src_dir/ dst_dir

ここで、dst_dir-はターゲットディレクトリです。または:

rsync -dADXgot src_dir dst_dir

ここで、dst_dir-は、ターゲットディレクトリを含むディレクトリ、または存在しないターゲットディレクトリです。

rsync manページから:

    -a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)
        --exclude=PATTERN       exclude files matching PATTERN

    -d, --dirs                  transfer directories without recursing
    -p, --perms                 preserve permissions
    -A, --acls                  preserve ACLs (implies -p)
    -X, --xattrs                preserve extended attributes
    -o, --owner                 preserve owner (super-user only)
    -g, --group                 preserve group
        --devices               preserve device files (super-user only)
        --specials              preserve special files
    -D                          same as --devices --specials
    -t, --times                 preserve modification times

-3

ディレクトリをコピーするには「-r」が必要です。


2
私はあなたを誤解したと思う、あなたは内容を必要とせず、xattrだけを必要とする SELinuxの場合、元のディレクトリを参照するchconを使用できます(A)。
倍の

-rすべてのサブディレクトリとその中のファイルのコピーを意味します...ツリー全体をコピーしたくありません... 1つのディレクトリのみの属性をコピーします-その内容に影響を与えません。
グジェゴシWierzowiecki
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.