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
해당 경로의 시작 부분을 디렉터리로 만들고 거기에 파일을 복사합니다.