Me preguntaba si alguien sabe cómo cambiar las marcas de tiempo de las carpetas de forma recursiva en función de la última marca de tiempo encontrada de los archivos en esa carpeta.
Así por ejemplo:
jon @ UbuntuPanther: / media / media / MP3s / Foo Fighters / (1997-05-20) El color y la forma $ ls -alF total 55220 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 18/04/2010 00:51 Foo Fighters - Doll.mp3 -rw-r - r-- 1 jon jon 3151170 18/04/2010 00:51 Foo Fighters - Suficiente espacio.mp3 -rw-r - r-- 1 jon jon 5004289 18/04/2010 00:52 Foo Fighters - Everlong.mp3 -rw-r - r-- 1 jon jon 5803125 18/04/2010 00:51 Foo Fighters - February Stars.mp3 -rw-r - r-- 1 jon jon 4994903 18/04/2010 00:51 Foo Fighters - ¡Hola, 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 18/04/2010 00:51 Foo Fighters - My Hero.mp3 -rw-r - r-- 1 jon jon 4294291 18/04/2010 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 18/04/2010 00:51 Foo Fighters - Nos vemos.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 18/04/2010 00:51 Foo Fighters - Walking After You.mp3 -rw-r - r-- 1 jon jon 3033660 18/04/2010 00:52 Foo Fighters - Wind Up.mp3
La carpeta "(1997-05-20) The Color and The Shape" tendría su marca de tiempo establecida en 2010-04-18 00:52.
fuente
/media/media/MP3s
? Luego, en zsh:for d in /media/media/MP3s/**/*(/); do touch -r $d/*(Dom[1]) $d; done
. Sin zsh (pero realmente, use zsh, es más simple): ponga el comando en un script y ejecútelofind /media/media/MP3s -type d -execdir /path/to/the/script \;
.for d in ...
¿cómo puede adaptar lo siguiente para que también funcione con carpetas que contienen espacios? (eso todavía falta en mi solución)Eso no es "recursivamente", solo está cambiando todas las marcas de tiempo en una carpeta. Si eso es lo que quieres decir, hay dos pasos.
stat -c '%Y' filename
generará la marca de tiempo defilename
, ystat -c '%Y %n' *
generará la marca de tiempo y el nombre de archivo de cada archivo en la carpeta, por lo que encontrará el nombre de archivo del archivo modificado más recientemente en la carpeta actual:Pensándolo bien, hay una manera más fácil de obtener la marca de tiempo más alta en la carpeta:
Luego, desea cambiar todos los archivos de la carpeta para que tengan la misma marca de tiempo que ese archivo.
touch -r foo bar
cambiarábar
para tener la misma marca de tiempo modificada quefoo
, por lo que esto cambiará todos los archivos de la carpeta para que tengan la misma marca de tiempo modificada que el archivo modificado más recientemente:Entonces, la frase es:
fuente
ls
manipula nombres de archivos que contienen caracteres que no son ASCII. Si quieres frases ingeniosas, usa zsh :-)Puse el trabajo juntos y ahora:
Este sería un script que cambia todos los directorios dentro
/tmp/test/
de la marca de tiempo del archivo más nuevo dentro de cada directorio:puedes agregar algunos archivos de prueba en / tmp como este:
fuente
"
nuevamente, primero parece que falta, pero funciona.Solo usa
fuente
Utilizo este script para configurar recursivamente las marcas de tiempo de la carpeta con el contenido más reciente. (Es muy similar a la respuesta de Gilles):
fuente
Tomé el comando @Gilles zsh y lo mejoré para que funcione en subcarpetas, pero parece que zsh es terriblemente ineficiente para la parte ** / * (FDod).
Las comillas permiten que las entradas de directorio que contienen espacios y pestañas funcionen correctamente. El FD hace que encuentre directorios no vacíos, incluidos los que comienzan con., El od lo hace buscar en profundidad , de modo que las marcas de tiempo de la carpeta principal se actualicen correctamente.
Al realizar la prueba, noté que el rendimiento y la huella de memoria para ** / * (FDod) era una locura (más de 1.4 GB para solo 650k carpetas), y leyó todo antes de comenzar a tocar las carpetas. Después de reemplazarlo con buscar / leer, se volvió mucho más rápido, no quemó memoria y comenzó casi de inmediato.
Si no lo está ejecutando en un script, reemplace "$ @" con las carpetas desde las que desea ejecutarlo.
fuente
Realmente no me gustó la oscuridad de los comandos de shell y rápidamente lo hice en python.
Establece recursivamente todos los directorios mtimes en el archivo / directorio no excluido más nuevo dentro de mtime.
fuente