모든 파일 / 디렉토리 속성을 다른 파일 / 디렉토리에 복제 / 복사하는 방법은 무엇입니까?


15

한 디렉토리의 속성 (소유권, 그룹, ACL, 확장 된 속성 등)을 디렉토리 내용 자체가 아닌 다른 디렉토리로 복사하려고합니다.

작동하지 않습니다.

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

참고 : 일 필요는 없습니다 cp.


1
를 전달하지 않았 -r으므로 디렉토리를 무시합니다. 그러나 내용이 아닌 속성 만 복사하고 싶습니까? 못생긴 해킹 만 생각할 수 있습니다. 또한 installSELinux 컨텍스트를 보존 할 수 있습니다.
lynxlynxlynx


1
@Gilles, 다른 주제를 지적 해 주셔서 감사합니다. 소유권과 모드 문제의 일부를 해결합니다. 확장 된 속성은 어떻습니까?
Grzegorz Wierzowiecki

1
@GrzegorzWierzowiecki 확장 된 속성을 지원하는 도구는 거의 없습니다. 중요한 경우 킬러 미스트의 rsync 제안을 사용하십시오.
Gilles 'SO- 악한 중지'

Btw. 다음은 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

그 마지막 편집은 분명히 인기가 있습니다. 두 번째 디렉토리에 /가 있거나없는 경우 마침내 요청 된 것과 정확히 일치합니다.
킬러 미스트

후행 슬래시는 첫 번째 인수에만 차이가 있으며 두 번째 인수에는 차이가 없습니다. 매뉴얼 페이지 USAGE섹션의 3 번째 또는 4 번째 단락에 설명되어 rsync(1)있습니다.
jw013

@ jw013 몇 달 전에 rsync 문서를 반복해서 읽은 후 첫 번째 (두 번째, 세 번째 등) 또는 마지막 인수에서 마지막 슬래시가 "내부"로 암시되었다는 결론을 내 렸습니다. 그러나 다시, 나는 종종 "into"영향을 암시 / 요구하기 위해 마지막 인수에서 /로 명령을 종료합니다.
킬러 미스트

내 직감은 모든 디렉토리 속성을 복사하고 일반 파일은 복사하지 않을 것 rsync -a -AX --include='*/' --exclude='*'입니다. 나는 테스트하지 않았습니다.
Gilles 'SO- 악마 그만해'

@ jw013이 답변을 받도록 도와 주셔서 감사합니다. 작은 샌드 박스 테스트 환경에서 많은 옵션을 시도했지만 계속 가까이 다가 갔지만 일부는 제대로 작동하지 않습니다.
killermist

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

2
이것은 재귀 적으로 작동하지 않으며 ACL 또는 확장 속성을 복사하지 않을 것이라고 생각합니다.
Mat

1
재귀 적이 지 않아야합니다. OP는 "디렉토리 내용 자체가 아닙니다"를 요청했으며 허용되는 대답은 rsync를 알려줍니다 --no-recursive. 이 답변의 문제점은 ACL 또는 XATTR을 수행하지 않는다는 것입니다.
ShadSterling

0
cp -rfp from_dir to_dir
  • -r -재귀
  • -f -힘
  • -p -속성 유지 : 모드, 소유권, 타임 스탬프

또한 필요 --attributes 전용
smremde

0

다른 사람들에게는 효과가 있기 때문에 이해할 수 없지만 ZFS가있는 FreeBSD에서는 rsync 메소드가 실패합니다. 아무 반응이 없습니다. 그러나 Jean-François Dockes의 방법은 효과적입니다. ( https://www.lesbonscomptes.com/pxattr/ 참조 ) 원본 질문에서 소스 디렉토리 = A 및 대상 디렉토리 = B.

pxattr -lR A > tmp.EAs

(A 디렉토리를 B, s / A / B /로 변경하려면 tmp.EAs의 첫 번째 행을 편집하십시오)

pxattr -S tmp.EAs

따라서 다른 사람의 방법 만 추천하는 것이 아닙니다 . 당신은 다른 사람의 추천하고 프로그램을 , 맞죠? 괜찮습니다. 잘 알려지지 않은 비표준 프로그램에 대한 문서를 검색하는 데 5 분이 걸렸습니다. 사람들이 잘 알려지지 않은 비표준 프로그램을 다운로드하도록 권장하고 있다고 더 명확하게 언급하면 ​​좋을 것입니다.
G-남자 '는 분석 재개 모니카'말한다

어깨를 으 It 포트 트리에 있습니다. 그것은 정확하게 비표준이 아닙니다. 그것은 모호하지 않으며 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-대상 dir을 포함하는 dir 또는 존재하지 않는 대상 dir입니다.

rsync 매뉴얼 페이지에서 :

    -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 용인 경우 원래 디렉토리 (A)를 참조하는 chcon을 사용할 수 있습니다.
tripledes

-r모든 하위 디렉토리 및 파일의 사본을 의미합니다 ... 전체 트리를 복사하고 싶지 않습니다 ... 내용에 영향을 미치지 않고 하나의 디렉토리에만 속성을 복사하고 싶습니다.
Grzegorz Wierzowiecki
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.