Bagaimana cara `menyentuh` file secara rekursif?

40

Saya perlu mengubah stempel waktu sekitar 5000 file.

Mengetik touch file1.txt, touch file2.txtakan membawaku selamanya.

Apakah ada cara untuk melakukan sesuatu di barisan touch -R *?

Unamata Sanatarai
sumber
1
Apakah maksud Anda ini touch file{1..3}.txt?
Avinash Raj
2
Anda tidak menentukan shell mana yang Anda gunakan, tetapi dengan zsh, touch **/*nyaman.
Marc Glisse
@Marc Glisse Ingatlah bahwa daftar argumen dengan mudah menjadi terlalu panjang.
bac0n
Di bash, Anda perlu mengatur globstar sebelum Anda dapat menggunakan sentuhan **
bac0n

Jawaban:

71

Anda dapat menggunakan findperintah untuk menemukan semua file Anda dan mengeksekusi touchpada setiap file yang ditemukan menggunakan-exec

find . -type f -exec touch {} +

Jika Anda ingin memfilter hasil Anda hanya untuk file teks, Anda dapat menggunakan

find . -type f -name "*.txt" -exec touch {} +
g_p
sumber
17
Saya sarankan menggunakan -exec's +terminator (bukan \;). Ini akan mengaitkan beberapa argumen ke setiap touchinstance (hingga batas argumen sistem) dan karenanya akan membayar jauh lebih sedikit (dan mungkin lebih cepat).
Oli
1
@g_p ... dan untuk sumber lihat Apa perbedaan antara menggunakan '+' dan '\;' dalam perintah -exec?
αғsнιη
2
Dan untuk lari kering, tinggalkan saja -exec touch {} +bagian itu, dan itu akan mencetak ke terminal Anda apa yang akan terpengaruh.
Alex
5
Terima kasih, Meskipun saya pikir 'temukan' tidak ada parameter pertamanya. find . -type f -exec touch {} +
giltsl
Bagaimana jika saya hanya ingin mengubah waktu akses, bukan waktu modifikasi? Haruskah itu "find -type f -exec touch -a {} +"?
weeo