¿Cómo toco recursivamente archivos que coinciden con un patrón?

8

Dentro de mi directorio ~ / docs, quiero "tocar" todos los archivos que terminan en .txt

¿Cómo puedo hacer esto?

Steve McLeod
fuente

Respuestas:

20

Con find:

find ~/docs -name "*.txt" -exec touch {} \;
  • Usted busca en ~/docs
  • La nameopción coincidirá con todos los txtarchivos:  execejecutará el comando touchen el nombre del archivo, que se sustituye en{}
  • \;finaliza el comando y touchse llamará una vez por cada archivo encontrado

Nota:

  • Una ligera variación, \+al final construye un solo comando para ejecutarse touchen todos estos archivos a la vez. Esto no es posible con todos los comandos, pero funciona touchy le ahorra algunas llamadas si tiene muchos archivos afectados.
slhck
fuente
44
{} \+sería mejor aquí ... touchpuede manejar muchos nombres de archivo en su línea de comando, por ejemplo, con 10 mil archivos y se harán {} \; 10 mil llamadas a touch... El uso {} \+llamará touchsolo una vez (dependiendo de la memoria disponible) ... Aquí es un extracto de de hallazgo hombre-página: -exec command {} + ... The command line is built in much the same way that xargs builds its command lines. Hay más detalles en la man finddocumentación.
Peter
@ Peter.O Cierto, solo es un hábito mío usar la otra sintaxis.
slhck
@slhck: Y mucho más lento con mayor sobrecarga.
Hola71