Comment «toucher» les fichiers récursivement?

40

J'ai besoin de changer l'horodatage d'environ 5000 fichiers.

Taper touch file1.txt, touch file2.txtme prendra pour toujours.

Y at-il un moyen de faire quelque chose dans les lignes de touch -R *?

Unamata Sanatarai
la source
1
Vouliez-vous dire cela touch file{1..3}.txt?
Avinash Raj
2
Vous n'avez pas spécifié le shell que vous utilisez, mais avec zsh, touch **/*c'est pratique.
Marc Glisse
@Marc Glisse Gardez à l'esprit que la liste d'arguments devient facilement trop longue.
mardi
En bash vous devez définir globstar avant de pouvoir utiliser contact **
bac0n

Réponses:

71

Vous pouvez utiliser la findcommande pour trouver tous vos fichiers et exécuter touchsur chaque fichier trouvé en utilisant-exec

find . -type f -exec touch {} +

Si vous souhaitez filtrer votre résultat uniquement pour les fichiers texte, vous pouvez utiliser

find . -type f -name "*.txt" -exec touch {} +
g_p
la source
17
Je suggère d'utiliser -execle +terminateur de (au lieu de \;). Cela enchaînera plusieurs arguments sur chaque touchinstance (jusqu'à la limite d'arguments système) et en produira beaucoup moins (et sera probablement plus rapide).
Oli
1
@g_p ... et pour une source voir Quelle est la différence entre "+" et "\;" dans la commande -exec?
αsнιη
2
Et pour un essai sur piste, laissez simplement de côté la -exec touch {} +pièce et elle imprimera sur votre terminal ce que cela aurait affecté.
Alex
5
Merci, bien que je pense que "trouver" manque son premier paramètre. find . -type f -exec touch {} +
giltsl
Que se passe-t-il si je veux seulement changer l'heure d'accès, pas l'heure de modification? Devrait-il être "find -type f -exec touch -a {} +"?
weeo