Como `tocar` arquivos recursivamente?

40

Preciso alterar o carimbo de data e hora de cerca de 5000 arquivos.

Digitando touch file1.txt, touch file2.txtvai me levar para sempre.

Existe uma maneira de fazer algo nas linhas de touch -R *?

Unamata Sanatarai
fonte
11
você quis dizer isso touch file{1..3}.txt?
Avinash Raj
2
Você não especificou qual shell está usando, mas com o zsh, touch **/*é conveniente.
Marc Glisse
@ Marc Glisse Lembre-se de que a lista de argumentos fica muito longa.
bac0n 8/10
No bash, você precisa definir o globstar antes de poder usar o touch **
bac0n

Respostas:

71

Você pode usar o findcomando para encontrar todos os seus arquivos e executar touchem todos os arquivos encontrados usando-exec

find . -type f -exec touch {} +

Se você deseja filtrar seu resultado apenas para arquivos de texto, pode usar

find . -type f -name "*.txt" -exec touch {} +
g_p
fonte
17
Eu sugiro usar -execo +terminador de (em vez de \;). Isso encadeará vários argumentos em cada touchinstância (até o limite de argumentos do sistema) e, portanto, desembolsará muito menos (e provavelmente será mais rápido).
Oli
11
@g_p ... e para uma fonte, veja Qual é a diferença entre usar '+' e '\;' no comando -exec?
αғsнιη
2
E para uma corrida a seco, deixe de fora a -exec touch {} +peça e ela imprimirá no seu terminal o que isso afetaria.
Alex
5
Obrigado, embora eu ache que 'find' está faltando seu primeiro parâmetro. find . -type f -exec touch {} +
giltsl
E se eu quiser apenas alterar o tempo de acesso, não o tempo de modificação? Deveria ser "find -type f -exec touch -a {} +"?
weeo