Làm cách nào tôi có thể sao chép đệ quy tất cả các tệp pdf trong một thư mục (và đó là thư mục con) vào một thư mục đầu ra duy nhất?


20

Tôi có một thư mục chứa một số lượng lớn tệp PDF, một số tệp nằm trong thư mục con (có thể mở rộng sâu một vài lớp). Tôi muốn di chuyển tất cả các tệp khớp *.pdfvào một thư mục đầu ra có tên papers.

Tôi có thể làm cái này như thế nào?


1
Làm thế nào bạn muốn xử lý trường hợp có hai tập tin a/x.pdfb/x.pdf?
Đại tá Panic

Câu trả lời:



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

Đây là một bài kiểm tra tôi đã làm

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

./a:
foo.pdf

./pdfs:

Lưu ý tập tin "aaa bbb.pdf".

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

./a:

./pdfs:
aaa bbb.pdf  foo.pdf

Đẹp! +1!
PenguinCoder

Bạn không cần trích dẫn "{}"để xử lý tên tập tin có chứa khoảng trắng?
terdon

@terdon: Trên thực tế, không có bạn không (mặc dù loại vấn đề đó đôi khi làm tôi khó chịu). Xem câu trả lời cập nhật.
RedGrittyBrick

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

(tương tự như câu trả lời khác nhưng tôi thích pipe / xargs / mv ... trực quan hơn đối với tôi)

FYI, tôi đã thực hiện thành công đoạn script một dòng trên nhiều thư mục và nhiều tệp pdf.


1
xargs có vấn đề về "khoảng trắng trong tên tệp" mà -exec không có. Bạn có thể làm trung gian điều này bằng cách thêm các -print0đối số vào kết quả tìm kiếm và -0xargs.
Rich Homolka

@RichHomolka thấy câu trả lời thay đổi. (Cảm ơn vì tiền boa. Điều đó thực sự hữu ích!)
Trevor Boyd Smith

Bạn đã bao giờ thử điều đó? Có vẻ như bạn cần thêm "-print0" vào cuối lệnh find
tollo

0

Đối với dòng lệnh Windows (cmd.exe), bạn có thể sử dụng:

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

1
Xin chào và chào mừng đến SU. Cảm ơn bạn đã trả lời, nhưng câu hỏi đặc biệt yêu cầu một giải pháp linux.
terdon

2
Nó vẫn còn tuyệt vời rằng các cửa sổ cũng có thể làm điều đó!
Vorac

0

Nếu bạn chỉ tìm kiếm một thư mục sâu, bạn có thể làm:

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

nơi <destination>đại diện cho một số thư mục. mvsẽ không tự động tạo một thư mục cho bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.