Linux에서 숨겨진(점으로 시작) 파일과 하위 디렉터리를 복사하는 방법은 무엇입니까?

Linux에서 숨겨진(점으로 시작) 파일과 하위 디렉터리를 복사하는 방법은 무엇입니까?

폴더 A의 숨겨진 파일과 숨겨진 하위 디렉터리(점으로 시작하는 디렉터리)를 폴더 B로 복사하는 방법은 무엇입니까? 예를 들어 다음과 같은 구조가 있는 경우:

A/a
A/b
A/.a
A/.b/
A/.b/somefile
A/.b/.c

A의 숨겨진 파일과 숨겨진 하위 디렉터리만 B에 복사하고 싶습니다.

B/.a
B/.b/
B/.b/somefile
B/.b/.c

cp A/.* B나는 이미 다음 명령을 시도했습니다.이 다른 슈퍼유저 질문. 그러나 하위 디렉터리는 복사되지 않습니다. 또한 시도했지만 cp -r A/.* B복사 .되므로 A의 정확한 복사본(일반 파일 포함)으로 끝납니다. 도움을 주시면 감사하겠습니다.

답변1

예를 들어 A 수준의 숨겨진 파일과 폴더만 찾고 싶지 않다면

A/b/.hidden

복사하려면 다음을 사용할 수 있어야 합니다.

cp -r A/.[^.]* B

이는 기본적으로 a로 시작하는 모든 문자를 복사 .한 다음 a 이외의 문자를 .필터링하여 복사하는 것을 의미합니다 ....

편집: Asker가 소유권, 날짜 등을 보존하고 싶다고 표시하지 않았기 때문에 cp 명령에서 -p를 제거했습니다.

답변2

문제는 패턴과 일치하는 디렉터리 A/.*가 있다는 것입니다 ..A

확장된 glob 패턴을 켜고 다음을 사용할 수 있습니다.

shopt -s extglob
cp -r A/.!(?(.)) B    

이름이 점으로 시작하고 두 번째 문자가 점도 아니고 아무것도 아닌 파일과 일치합니다( ?(.) 는 아무것도 일치하지 않거나 점과 일치하고, !(...) 는 이를 부정합니다. 즉 !(?(.)) 는 다른 모든 것과 일치합니다. 아무것도 없거나 점보다).

답변3

이와 같은 경우에는 다음을 사용하는 것이 좋습니다.find대신에cp이와 같이:

find A/ -type f -maxdepth 1 -name '.*' -exec cp -p {} B/ \;

기본 구문은 다음과 같이 분류됩니다.

  • find A/ -type f: 유형이 파일인(디렉토리 대신) find디렉토리의 항목 …A/
  • -maxdepth 1 -name '.*'maxdepth: 1개의 디렉토리 중 으로 name시작하는 에 대한 내용입니다 ..
  • -exec cp -p {} B/ \;: 그리고 이러한 파일이 발견되면 소스( )에서 대상까지 날짜/시간을 보존하는 플래그 와 함께 명령이 실행 exec됩니다 .cp-p{}B/

maxdepth나는 실수로 전체 파일 시스템을 복사하지 않도록 제어 계층을 추가하는 데 사용하는 것을 좋아합니다 . 하지만 자유롭게 제거하세요.

답변4

대안으로 두 번째 문자가 영숫자(원천):

cp -r A/.[a-zA-Z0-9]* B

관련 정보