Làm thế nào để `touch` tập tin đệ quy?


40

Tôi cần thay đổi dấu thời gian của khoảng 5000 tệp.

touch file1.txt, touch file2.txtsẽ đưa tôi mãi mãi.

Có cách nào để làm một cái gì đó trong dòng touch -R *?


1
ý bạn là sao touch file{1..3}.txt?
Avinash Raj

2
Bạn đã không chỉ định shell nào bạn đang sử dụng, nhưng với zsh, touch **/*thì tiện lợi.
Marc Glisse

@Marc Glisse Hãy nhớ rằng danh sách đối số dễ dàng quá dài.
bac0n

Trong bash, bạn cần đặt globalstar trước khi bạn có thể sử dụng cảm ứng **
bac0n

Câu trả lời:


71

Bạn có thể sử dụng findlệnh để tìm tất cả các tệp của mình và thực thi touchtrên mọi tệp được tìm thấy bằng cách sử dụng-exec

find . -type f -exec touch {} +

Nếu bạn chỉ muốn lọc kết quả của mình cho các tệp văn bản, bạn có thể sử dụng

find . -type f -name "*.txt" -exec touch {} +

17
Tôi muốn đề nghị sử dụng -exec's +terminator (thay vì \;). Điều này sẽ xâu chuỗi nhiều đối số vào mỗi touchphiên bản (tối đa giới hạn đối số hệ thống) và do đó sẽ tách ra ít hơn nhiều (và có thể nhanh hơn).
Oli


2
Và để chạy khô, chỉ cần bỏ -exec touch {} +phần đó ra và nó sẽ in ra thiết bị đầu cuối của bạn những gì nó sẽ bị ảnh hưởng.
Alex

5
Cảm ơn, mặc dù tôi nghĩ rằng 'find' đang thiếu tham số đầu tiên của anh ấy. find . -type f -exec touch {} +
giltsl

Nếu tôi chỉ muốn thay đổi thời gian truy cập chứ không phải thời gian sửa đổi thì sao? Nó có nên là "find -type f -exec touch -a {} +" không?
tuần trăng mật
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.