Je me demandais si quelqu'un savait comment modifier les horodatages des dossiers de manière récursive en fonction du dernier horodatage trouvé des fichiers dans ce dossier.
Ainsi, par exemple:
jon @ UbuntuPanther: / media / media / MP3s / Foo Fighters / (1997-05-20) La couleur et la forme $ ls -alF 55220 au total drwxr-xr-x 2 jon jon 4096 2010-08-30 12:34 ./ drwxr-xr-x 11 jon jon 4096 2010-08-30 12:34 ../ -rw-r - r-- 1 jon jon 1694044 2010-04-18 00:51 Foo Fighters - Doll.mp3 -rw-r - r-- 1 jon jon 3151170 18/04/2010 00:51 Foo Fighters - Enough Space.mp3 -rw-r - r-- 1 jon jon 5004289 2010-04-18 00:52 Foo Fighters - Everlong.mp3 -rw-r - r-- 1 jon jon 5803125 2010-04-18 00:51 Foo Fighters - Février Stars.mp3 -rw-r - r-- 1 jon jon 4994903 18/04/2010 00:51 Foo Fighters - Hé, Johnny Park! .mp3 -rw-r - r-- 1 jon jon 4649556 18/04/2010 00:52 Foo Fighters - Monkey Wrench.mp3 -rw-r - r-- 1 jon jon 5216923 2010-04-18 00:51 Foo Fighters - My Hero.mp3 -rw-r - r-- 1 jon jon 4294291 2010-04-18 00:52 Foo Fighters - My Poor Brain.mp3 -rw-r - r-- 1 jon jon 6778011 18/04/2010 00:52 Foo Fighters - New Way Home.mp3 -rw-r - r-- 1 jon jon 2956287 2010-04-18 00:51 Foo Fighters - See You.mp3 -rw-r - r-- 1 jon jon 2730072 18/04/2010 00:51 Foo Fighters - Up in Arms.mp3 -rw-r - r-- 1 jon jon 6086821 2010-04-18 00:51 Foo Fighters - Walking After You.mp3 -rw-r - r-- 1 jon jon 3033660 2010-04-18 00:52 Foo Fighters - Wind Up.mp3
Le dossier "(1997-05-20) The Color and The Shape" aurait son horodatage réglé sur 2010-04-18 00:52.
la source
/media/media/MP3s
? Puis , en zsh:for d in /media/media/MP3s/**/*(/); do touch -r $d/*(Dom[1]) $d; done
. Sans zsh (mais vraiment, utilisez zsh, c'est juste plus simple): mettez la commande dans un script et exécutezfind /media/media/MP3s -type d -execdir /path/to/the/script \;
.for d in ...
comment pouvez-vous adapter les éléments suivants, de sorte que cela fonctionne également avec les dossiers contenant des espaces? (qui manque toujours dans ma solution)Ce n'est pas "récursivement", c'est juste changer tous les horodatages d'un dossier. Si c'est ce que vous voulez dire, il y a deux étapes.
stat -c '%Y' filename
affichera l'horodatage defilename
, etstat -c '%Y %n' *
affichera l'horodatage et le nom de fichier de chaque fichier dans le dossier, donc cela trouvera le nom de fichier du fichier modifié le plus récemment dans le dossier actuel:Après réflexion, il existe un moyen beaucoup plus simple d'obtenir l'horodatage le plus élevé du dossier:
Ensuite, vous souhaitez modifier tous les fichiers du dossier pour avoir le même horodatage que ce fichier.
touch -r foo bar
changerabar
pour avoir le même horodatage modifié quefoo
, donc cela changera tous les fichiers du dossier pour avoir le même horodatage modifié que votre fichier modifié le plus récemment:Ainsi, le one-liner est:
la source
ls
modifier les noms de fichiers contenant des caractères non ASCII. Si vous voulez des one-liners, utilisez zsh :-)J'ai rassemblé le travail et maintenant:
Ce serait un script qui change tous les répertoires à l'intérieur
/tmp/test/
de l'horodatage du fichier le plus récent à l'intérieur de chaque répertoire:vous pouvez ajouter des fichiers de test dans / tmp comme ceci:
la source
"
nouveau le, il semble d'abord qu'il manque, mais cela fonctionne.il suffit d'utiliser
la source
J'utilise ce script pour définir récursivement les horodatages des dossiers sur le dernier contenu. (C'est très similaire à la réponse de Gilles):
la source
J'ai pris la commande @Gilles zsh et l'ai améliorée pour qu'elle fonctionne dans les sous-dossiers, mais il semble que zsh soit terriblement inefficace pour la partie ** / * (FDod).
Les guillemets permettent aux entrées de répertoire contenant des espaces et des tabulations de fonctionner correctement. Le FD fait trouver des répertoires non vides, y compris ceux commençant par., Le od fait la recherche dans la profondeur d'abord de manière, de sorte que le dossier parent horodatages sont mis à jour correctement.
Lors des tests, j'ai remarqué que les performances et l'encombrement de la mémoire pour ** / * (FDod) étaient fous (plus de 1,4 Go pour seulement 650 000 dossiers), et il a lu le tout avant de commencer à toucher les dossiers. Après l'avoir remplacé par find / read, il est devenu beaucoup plus rapide, n'a pas brûlé la mémoire et a commencé presque immédiatement.
Si vous ne l'exécutez pas dans un script, remplacez "$ @" par les dossiers à partir desquels vous souhaitez l'exécuter.
la source
Je n'aimais pas vraiment l'obscurité des commandes shell et je l'ai fait rapidement en python.
Il définit récursivement tous les répertoires mtimes sur le dernier fichier / répertoire mtime non exclu à l'intérieur.
la source