2009-10-13 35 views
26

Bất kỳ ai có một cách thay thế của việc tìm kiếm và sao chép tập tin trong bash hơn:Bash: tìm và sao chép

find . -ctime -15 | awk '{print "cp " $1 " ../otherfolder/"}' | sh

Tôi thích cách này vì nó linh hoạt, như tôi đang xây dựng lệnh của tôi (có thể bằng bất kỳ và thực hiện nó sau.

Có cách nào khác để tinh giản lệnh vào danh sách tệp không?

Cảm ơn

+1

tương tự Q & A 1 + 1/2 năm sau: http://stackoverflow.com/ q/5241625/1172302 –

Trả lời

62

tôi sẽ khuyên bạn sử dụng find 's -exec tùy chọn:

find . -ctime 15 -exec cp {} ../otherfolder \;

Như mọi khi, tham khảo ý kiến ​​manpage cho kết quả tốt nhất.

+0

Trang tìm người đàn ông gợi ý sử dụng dấu nháy đơn xung quanh niềng răng vì nó có thể bị hiểu nhầm mà không có chúng. –

+4

Bạn nên thay thế '\;' bằng '+' để tránh chạy 'cp' mỗi lần. – BroSlow

+3

@BroSlow Không chắc chắn lý do tại sao nhưng điều này chỉ hoạt động với \; và với + tôi nhận được 'thiếu đối số cho -exec'. – hayavuk

8

Tôi thường sử dụng này một:

find . -ctime -15 -exec cp {} ../otherfolder/ \; 
-1

exec là khả năng con đường để đi, trừ khi bạn có quá nhiều file. Sau đó sử dụng xargs.

4

Bạn có thể làm điều đó với xargs:

$ find . -ctime 15 -print0 | xargs -0 -I{} cp {} ../otherfolder 

Xem thêm grep utility in shell script.

+1

Điều này có lợi thế là nhanh hơn 'find -exec' vì nó không tạo ra một quy trình' cp' mới cho mỗi tệp. Tuy nhiên nếu bạn có GNU tìm thấy bạn có thể làm 'find -exec ... +' thay vì 'find -exec ... ';'' cho cùng một hiệu ứng :) – hobbs

8

Nếu bạn cp là GNU của:

 
find . -ctime 15 -print0 | xargs -0 cp --target-directory=../otherfolder 
1

Sử dụng này để sao chép và nhiều thứ khác:

for f in (find /apps -type f -name 'foo'); do cp ${f} ${f}.bak; cmd2; cmd3; done; 
Các vấn đề liên quan