Necesito mover archivos en función de un año. Usé el findcomando
find /media/WD/backup/osool/olddata/ -mtime +470 -exec ls -lrth {} \;|sort -k6
pero para que este comando se ejecute con éxito, necesito saber exactamente mtime470 ahora es solo una suposición. Significa que si puedo dar el año 2012, me da archivos solo relacionados con 2012.
Así que necesito consejos sobre cómo
Busque archivos basados en el año, por ejemplo, 2012 y muévalos a otro directorio.
OS release 5.2
FIND version
GNU find version 4.2.27
Features enabled: D_TYPE O_NOFOLLOW(enabled) LEAF_OPTIMISATION SELINUX

-exec ls ... \;lugar de-exec ... +? ¿Tu hallazgo es demasiado viejo para eso? En ese casofind ... -print0 | xargs -0 ls...sería mucho más rápido.Respuestas:
Desea usar la
-newermtopción parafind:para obtener todos los archivos con tiempo de modificación en 2012.
Si su búsqueda no es compatible
-newermt, también puede hacer lo siguiente para evitar el uso de cálculos de desplazamiento:fuente
find(he encontrado la versión 4.4.2)-exec lsNo tiene ningún sentido.fuente
-exec ls -ltiene más sentido e incluso más durante las pruebas.findpuede imprimir todo lo quelspueda. OK, con una excepción: escapar / citar caracteres desagradables. Pero, en general, la salida defindse puede ordenar directamente. Las llamadas inútiles de ls no hacen que todo sea más rápido.-printo posiblemente-ls) durante las pruebas. La ventaja de usar-exec ls {}es que ya ejecuta algo externo para encontrar . Entonces, para cuando cambies delsamv, los cambios reales son mínimos.Según la página de manual, el argumento para -mtime es la cantidad de días que está buscando. Puede usar
date +%jpara encontrar la cantidad de días desde el 1 de enero del año en curso.fuente
-daystartopción si va a trabajar con-mtime. De lo contrario, tendrá problemas con los archivos al comienzo y al final del año, sin importar cómo lo haga, a menos que lo ejecute exactamente a medianoche. Puede hacer el desplazamiento con mayor precisión-mminque con-mtimesi puede encontrar el número de minutos desde el año nuevo fácilmente. Pero existe el mismo problema con eso que con-mtime, solo por menos archivos (esos un minuto alrededor de la medianoche del año nuevo).find -mtime $("date -+%j")probablemente no le dará al OP lo que está buscando. Sin embargo, lo dejo para la posteridad, ya que esto parece un posible punto ciego para que la gente caiga.Puede intentar usar una combinación con los comandos
staty / odatecomo en las siguientes frases:BSD / Mac OS X:
Linux:
En ambos casos, el enfoque es utilizar el
datecomando para extraer el año desde la última hora de modificación de cada archivo y luego construir una ruta con este año. El comandomkdir -pcreará esta ruta si aún no existe. Por supuesto, puede usar algunas otrasfindopciones para refinar su búsqueda.fuente
Si hace esto desde el directorio de trabajo, puede hacerlo en su lugar:
Esto simplifica las cosas considerablemente y no causa ninguna superposición. Pero también supone que estos archivos tienen más de 6 meses de antigüedad, y eso
lsimprimirá el año en lugar de la hora exacta.Para archivos de más de 6 meses de antigüedad, solo tendrá que reemplazarlo con esto:
o algo similar, dependiendo del mes. Si desea crear una lista de meses para mover archivos (o si desea crear una lista por años), haga esto:
fuente