디렉토리 (및 서브 디렉토리)의 모든 pdf 파일을 단일 출력 디렉토리에 재귀 적으로 복사하려면 어떻게해야합니까?


20

많은 PDF 파일이 들어있는 디렉토리가 있는데 그중 일부는 하위 디렉토리에 있습니다 (여러 계층을 깊게 확장 할 수 있음). 일치하는 모든 파일 *.pdf을이라는 단일 출력 폴더로 이동하고 싶습니다 papers.

어떻게해야합니까?


1
두 개의 파일이있는 경우를 어떻게 처리 a/x.pdf하고 b/x.pdf싶습니까?
대령 패닉

답변:



30
  find /bunchopdfs -name "*.pdf" -exec mv {} /papers \;    

여기 내가 한 시험이있다

$ ls -R
.:
a  aaa bbb.pdf  pdfs

./a:
foo.pdf

./pdfs:

"aaa bbb.pdf"파일을 확인하십시오.

$ find . -name "*pdf" -exec mv {} pdfs \;
$ ls -R
.:
a  pdfs

./a:

./pdfs:
aaa bbb.pdf  foo.pdf

아름다운! +1!
PenguinCoder

"{}"공백이 포함 된 파일 이름을 처리 하기 위해 인용 할 필요가 없습니까?
terdon

@ terdon : 실제로, 당신은하지 않습니다 (그런 종류의 문제는 때때로 나를 잡습니다). 업데이트 된 답변을 참조하십시오.
RedGrittyBrick

4
find -print0 /directory/with/pdfs -iname "*.pdf" | xargs -0 mv -t /papers

(다른 답변과 비슷하지만 pipe / xargs / mv를 선호합니다 ... 더 직관적입니다)

참고로, 여러 디렉토리와 여러 pdf 파일에서 위의 한 줄 스크립트를 성공적으로 수행했습니다.


1
xargs에는 -exec가하지 않는 "파일 이름의 공백"문제가 있습니다. -print0find와 -0xargs에 args 를 추가하여이를 다소 중재 할 수 있습니다 .
Rich Homolka

@RichHomolka는 변경된 답변을 봅니다. (팁 감사합니다. 정말 유용합니다!)
Trevor Boyd Smith

당신은 그것을 시도한 적이 있습니까? 당신 같은 외모는 find 명령의 끝에서 "-print0"를 추가 할 필요가
톨로

0

Windows 명령 행 (cmd.exe)의 경우 다음을 사용할 수 있습니다.

for /F "usebackq delims==" %j IN (`dir /s /b *.pdf`) do copy "%j" c:\target_dir

1
안녕하세요. SU에 오신 것을 환영합니다. 귀하의 답변에 감사드립니다,하지만 질문은 특히 리눅스 솔루션을 요청합니다.
terdon

2
창문도 그렇게 할 수 있다는 것은 여전히 ​​놀라운 일입니다!
Vorac September

0

하나의 디렉토리 만 검색하는 경우 다음을 수행 할 수 있습니다.

mkdir <destination>
mv */*.pdf <destination>

여기서 <destination>일부 디렉토리를 나타냅니다. mv자동으로 디렉토리를 만들지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.