2012-09-17 10 views
9

Sto cercando un modo dalla riga di comando per toccare ogni file in una directory (e sottodirectory) a causa di un mio errore un mio repo sincronizzato è uscito un po 'da passo sulle mie macchine di sviluppo.Tocco ricorsivo per correggere la sincronizzazione tra i computer

Ho attraversato uno spiacevole voodoo che è riuscito a riportarlo in uno stato pulito su una macchina, prima di eseguire la sincronizzazione successiva, desidero dare la priorità a tutto il tempo necessario su questa macchina.

C'è un modo semplice per toccare tutti i file?

O sto facendo una sincronizzazione manuale della directory?

(sto usando Dropbox per la sincronizzazione per riferimento)

risposta

15

Si potrebbe usare find con xargs a toccare tutti i file nella directory corrente o specificato o al di sotto:

find . -print0 | xargs -0 touch 

per la directory corrente . Per una determinata directory:

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

L'opzione -print0 a find insieme all'opzione -0-xargs rendere il comando robusta ai nomi dei file con gli spazi rendendo il delimitatore un NULL.

Edit:

Come Jeremy J Starchar dice in un commento, quanto sopra è adatto solo se il find e xargs sono una parte della toolchain GNU. Se siete su un sistema withour strumenti GNU è possibile utilizzare:

find . -exec touch {} \; 

Edit by dcgregorya:

Avere a che fare questo nei confronti di un grande insieme di dati che ho trovato questo comando per essere (molto) Più veloce.

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

I limiti trovano trovare le cartelle quindi esegue il tocco sulla cartella/*.

+2

oppure si può semplicemente utilizzare l'azione '-execdir':' find. -execdir touch '{}' \; ' – chepner

+0

Si noti che find' -print0' e xarg's '-0' sono estensioni GNU e potrebbe non essere presente su catene di strumenti non GNU. 'trova -exec touch {}; 'è più lento quando è più compatibile. –

0

Quindi questa è una soluzione al mio problema immediato di toccare tutti i file, se funziona con Dropbox dovrà essere visto.

Nella radice della directory in questione

find . -print -exec touch {} \; 

(stampa è estraneo, ma può essere utile per il feedback)

Problemi correlati