¿Cómo 'tocar' los archivos de forma recursiva?

40

Necesito cambiar la marca de tiempo de aproximadamente 5000 archivos.

Escribiendo touch file1.txt, touch file2.txtme va a llevar siempre.

¿Hay alguna manera de hacer algo en la línea de touch -R *?

Unamata Sanatarai
fuente
1
quieres decir esto touch file{1..3}.txt?
Avinash Raj
2
No especificó qué shell está utilizando, pero con zsh, touch **/*es conveniente.
Marc Glisse 01 de
@Marc Glisse Tenga en cuenta que la lista de argumentos fácilmente se hace demasiado larga.
Bac0n
En bash, debe configurar globstar antes de poder usar touch **
bac0n

Respuestas:

71

Puede usar el findcomando para encontrar todos sus archivos y ejecutarlos touchen cada archivo encontrado usando-exec

find . -type f -exec touch {} +

Si desea filtrar su resultado solo para archivos de texto, puede usar

find . -type f -name "*.txt" -exec touch {} +
g_p
fuente
17
Sugeriría usar -execel +terminador de (en lugar de \;). Esto encadenará múltiples argumentos en cada touchinstancia (hasta el límite de argumento del sistema) y, por lo tanto, desembolsará mucho menos (y probablemente sea más rápido).
Oli
1
@g_p ... y para una fuente vea ¿Cuál es la diferencia entre usar '+' y '\;' en el comando -exec?
αғsнιη 01 de
2
Y para una ejecución en seco, simplemente omita la -exec touch {} +parte, e imprimirá en su terminal lo que habría afectado.
Alex
55
Gracias, aunque creo que a 'find' le falta su primer parámetro. find . -type f -exec touch {} +
giltsl
¿Qué sucede si solo quiero cambiar el tiempo de acceso, no el tiempo de modificación? ¿Debería ser "find -type f -exec touch -a {} +"?
weeo