현재 디렉토리를 ‘찾기’하지 않는 방법 거의 있습니다! 특히, 지정된 경로에서

현재 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.