2012-09-17 9 views
9

Estoy buscando un camino desde la línea de comandos para tocar cada archivo en un directorio (y subdirectorios) debido a un error mío que mi repositorio sincronizado se ha salido un poco pisa mis máquinas de desarrollo.Toque recursivo para arreglar la sincronización entre computadoras

He pasado por un vudú desagradable para volver a tener un estado limpio en una máquina, antes de hacer la próxima sincronización, quiero priorizar todo el tiempo en esta máquina.

¿Hay una manera fácil de tocar todos los archivos?

¿O es mejor hacer una sincronización manual del directorio?

(estoy usando Dropbox para sincronizar de referencia)

Respuesta

15

Se puede usar junto con findxargs tocar cada archivo en el directorio actual o especificado o por debajo de:

find . -print0 | xargs -0 touch 

para el directorio actual . Para un determinado directorio:

find /path/to/dir -print0 | xargs -0 touch 

La opción -print0 a find junto con la opción -0 a xargs hacer el comando robusta a los nombres de archivo con espacios, haciendo que el delimitador un valor NULL.

Editar:

Como dice Jeremy J Starchar en un comentario, lo anterior sólo es adecuado si su find y xargs son una parte de la cadena de herramientas GNU. Si usted está en un sistema sin que las herramientas GNU que puede usar:

find . -exec touch {} \; 

Editar por dcgregorya:

tener que hacer esto contra un gran conjunto de datos que he encontrado que este mandato sea (mucho) Más rápido.

find ./ -type d -print0 | xargs -I{} -0 bash -c "touch {}/*" 

Limita la búsqueda de encontrar carpetas y luego ejecuta el toque en la carpeta/*.

+2

O simplemente puede utilizar la acción '-execdir':' Encontrar. -execdir touch '{}' \; ' – chepner

+0

Se debe tener en cuenta que find' -print0' y xarg '-0' son extensiones de GNU y es posible que no estén presentes en cadenas de herramientas que no sean de GNU. 'encontrar. -exec touch {}; 'es más lento más compatible cuando sea necesario. –

0

Así que esta es una solución a mi problema inmediato de tocar todos los archivos, si funciona con Dropbox tendrá que ser visto.

En la raíz del directorio en cuestión

find . -print -exec touch {} \; 

(impresión es extraña pero puede ser útil para la retroalimentación)

Cuestiones relacionadas