동일한 디렉토리에 있는 다른 파일을 복사하지 않고 파일을 찾고 해당 디렉토리를 복사하는 방법은 무엇입니까?

동일한 디렉토리에 있는 다른 파일을 복사하지 않고 파일을 찾고 해당 디렉토리를 복사하는 방법은 무엇입니까?

pdf파일과 기타 확장자가 포함된 다양한 폴더가 있습니다 . pdf모든 파일을 다른 대상으로 복사 하고 싶습니다 . 하지만 다음과 같이 find로 수행하면:

"${SEARCHDIR}" -iname "*.pdf" | xargs -d "\n" -I {} cp -r --backup=t {} "${OUTPUTFOLDER}/"

모든 파일을 하나의 대상에 저장했는데 pdf, 이는 나에게 너무 혼란스럽습니다. 그래서 상위 디렉토리를 포함하여 일치하는 파일을 복사하고 싶지만아니요이 디렉터리에 일치하지 않는 파일이 있습니다.

입력하다:

user/search/test/sub
user/search/test/sub2
user/search/test/file.pdf
user/search/test/file.doc
user/search/test2/sub
user/search/test2/sub2/file2.pdf
user/search/test2/file3.pdf
user/search/test2/file.doc

다음과 같이 복사해야 합니다.

/destination/test/file.pdf
/destination/sub2/file2.pdf
/destination/test2/file3.pdf

편집하다: 전체 경로를 복사하고 싶지 않습니다. 내 출력이 다음과 같이 표시되는 것을 원하지 않습니다.

/destination/test/file.pdf
/destination/test2/sub2/file2.pdf
/destination/test2/file3.pdf

어떻게 해야 하나요?

답변1

에서는 zsh다음을 수행할 수 있습니다.

set -o extendedglob
for file ( $SEARCHDIR/**/*.(#i)pdf(ND^/) ) {
  dest=$OUTPUTFOLDER/${file:t2}
  mkdir -p -- $dest:h && cp --backup=t -- $file $dest
}

여기서 ${file:t2}파일의 두 부분으로 구성된 꼬리, 파일 이름 및 상위 디렉터리의 파일 이름을 가져옵니다. 그런 다음 h해당 경로의 시작 부분을 디렉터리로 만들고 거기에 파일을 복사합니다.

관련 정보