현재 find
지정된 디렉토리에서 특정 패턴과 일치하는 모든 파일 및 폴더 구조를 복사 하려고합니다 . 거의 거의 있습니다!
특히, 지정된 경로에서 ‘_’문자로 시작하지 않는 모든 폴더를 재귀 적으로 복사하고 싶습니다.
find /source/path/with/directories -maxdepth 1 -type d ! -name _\* -exec cp -R {} /destination/path \;
/ source / path / with / directories / 경로에는 ‘_’및 기타로 시작하는 기계 별 디렉토리가 있으며 다른 디렉토리 만 복사하는 데 관심이 있습니다. 나 이외의 이유로 find 명령은 / source / path / with / directories / 디렉토리를 반환하므로 ‘_’로 시작하는 디렉토리와 그 내용을 복사합니다.
왜 그런지에 대한 힌트가 있습니까?
감사,
파스칼
답변
find
루트 경로는 기준과 일치하므로 루트 경로를 반환합니다. 즉, 디렉토리이고로 시작하지 않습니다 _
.
당신은 찾고 있습니다 -mindepth 1
.
$ cd /tmp
$ mkdir a
$ touch a/b
$ mkdir a/c
$ touch a/c/d
$ find a
a
a/b
a/c
a/c/d
$ find a -mindepth 1
a/b
a/c
a/c/d
참조 : 맨 페이지 찾기
답변
다음에서 변경 :
find /source/path/with/directories ...
에:
(shopt -s dotglob; find /source/path/with/directories/* ... )
그 방법 /source/path/with/directories
은 포함되지 않습니다.
는 shopt -s dotglob
그 때문에 인 *
도로 시작하는 파일과 디렉토리 일치합니다 .
(숨겨진 파일, 디렉토리).
그리고 모든 것은 서브 쉘 내에 만 (...)
영향을 미치기 위해 서브 쉘에 싸여 있습니다 shopt
. 그렇지 않으면 나중에로 실행 취소해야합니다 shopt -u dotglob
.