2013-08-20 38 views
30

Tôi muốn tìm tất cả các tệp pdf trong một thư mục. Nó chứa các tệp pdf bên trong và nhiều thư mục chứa nhiều hơn. Thư mục nằm trên máy chủ từ xa mà tôi có quyền truy cập ssh. Tôi đang sử dụng thiết bị đầu cuối mac nhưng tôi tin rằng máy chủ tôi đang kết nối là Centos.Cách tìm tệp theo cách đệ quy theo loại tệp và sao chép chúng vào thư mục trong khi ở ssh?

Tôi cần tìm tất cả các tệp pdf và sao chép tất cả sang một thư mục trên máy chủ từ xa. Tôi đã thử khoảng 10 biến thể không có may mắn. Cả hai của tôi và các hệ thống từ xa dường như không nhận ra -exec như là một lệnh mặc dù exec là tốt như vậy thats một vấn đề.

Tôi không chắc vấn đề là gì ở đây nhưng lệnh không thất bại nó chỉ ngồi đó và quầy hàng mãi mãi nên tôi không có bất kỳ lỗi hữu ích nào để đăng.

cp $(find -name "*.pdf" -type f; exec ./pdfsfolder {} \; | sed 1q) 

find: ./tcs/u25: Permission denied 
find: ./tcs/u68: Permission denied 
-bash: /var/www/html/tcs_dev/sites/default/files/pdfsfolder: is a directory 
-bash: exec: /var/www/html/tcs_dev/sites/default/files/pdfsfolder: cannot execute: Success 
cp: target `./runaways_parents_guide_2013_final.pdf' is not a directory 

Đây là lần cuối tôi đã thử, tôi cho rằng tôi có thể bỏ qua lỗi cho phép bị từ chối nhưng không chắc về phần còn lại.

Trả lời

95

Hãy thử điều này:

find . -name "*.pdf" -type f -exec cp {} ./pdfsfolder \; 
+0

Cảm ơn, nó đã ngồi đó một lúc nhưng tôi nghĩ rằng có thể đã xảy ra với các lỗi quyền. – lorless

+2

Lệnh '\;' như một phần của lệnh exec thực hiện điều gì? – user3728501

+0

@ user3728501 nó chấm dứt biểu thức exec –

2

Something như thế này nên làm việc.

ssh [email protected] 'find -type f -name "*.pdf" -exec cp {} ./pdfsfolder \;'

+1

Phần '\;' như một phần của lệnh 'exec' làm gì? – user3728501

+0

@ user3728501 http://stackoverflow.com/questions/20913198/why-are-the-backslash-and-semicolon-required-with-the-find-commands-exec-optio – ptierno

1

Paul Dardeau Câu trả lời là hoàn hảo, điều duy nhất là, những gì nếu tất cả các tập tin bên trong các thư mục không phải là tệp PDF và bạn muốn lấy tất cả không có vấn đề mở rộng. Chỉ cần thay đổi nó thành

find . -name "*.*" -type f -exec cp {} ./pdfsfolder \; 

Chỉ cần tổng hợp!