2012-08-13 35 views
17

Nếu tôi chạy lệnh mv folder2/*.* folder, tôi nhận được lỗi "danh sách đối số quá dài".Di chuyển số lượng lớn tệp

Tôi tìm thấy một số ví dụ về lsrm, xử lý lỗi này, sử dụng find folder2 -name "*.*". Nhưng tôi gặp sự cố khi áp dụng chúng cho mv.

+0

Câu hỏi này được hỏi và trả lời ở đây trên SO trên cơ sở hàng tuần. Vui lòng tìm hiểu cách tìm kiếm trước khi yêu cầu. Chúc may mắn. – shellter

+0

@shellter Tôi tìm thấy một số ví dụ tương tự, nhưng như tôi đã nói, tất cả chúng là ví dụ về 'ls' và' rm'. – DrXCheng

+1

@shellter, nếu có quá nhiều dups, hãy tìm một và bỏ phiếu để đóng. –

Trả lời

47
find folder2 -name '*.*' -exec mv {} folder \; 

-exec chạy bất kỳ lệnh, {} chèn tên tập tin được tìm thấy, \; đánh dấu sự kết thúc của lệnh exec.

+0

Cảm ơn câu trả lời, tôi tự hỏi có bao nhiêu tập tin có thể mv di chuyển.Giới hạn của số lượng tập tin cho mv để làm việc là gì. – Thunder

12

Các câu trả lời khác find hoạt động, nhưng rất chậm đối với một số lượng lớn tệp, vì chúng thực thi một lệnh cho mỗi tệp. Một cách tiếp cận hiệu quả hơn là một trong hai để sử dụng + vào cuối find, hoặc sử dụng xargs:

# Using find ... -exec + 
find folder2 -name '*.*' -exec mv --target-directory=folder '{}' + 

# Using xargs 
find folder2 -name '*.*' | xargs mv --target-directory=folder 
+0

Đồng ý bình thường, nhưng nếu một 'mv' thẳng tạo ra một lỗi" danh sách đối số quá dài ", tôi nghi ngờ một từ chỉ được xây dựng bằng cách sử dụng' find' sẽ hoạt động. –

+1

Tôi không chắc chắn tôi theo dõi. Đó là toàn bộ điểm của '+' ở cuối 'tìm'. Nếu bạn sử dụng nó, 'find' hoạt động chính xác như' tìm | kết hợp xargs'. – Idelic

+0

Vỏ bị lỗi khi OP cố di chuyển tất cả các tệp cùng một lúc. Cả 'find' và' xargs' cuối cùng đều chạy cùng một lệnh shell để thực sự thực hiện việc di chuyển, vì vậy chúng cũng có khả năng bị lỗi. Đó là lý do tại sao tôi đề xuất phương pháp một lúc tại thời điểm mặc dù nó chậm hơn. –

Các vấn đề liên quan