Necesito mover archivos en función de un año. Usé el find
comando
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 mtime
470 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
-newermt
opció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 ls
No tiene ningún sentido.fuente
-exec ls -l
tiene más sentido e incluso más durante las pruebas.find
puede imprimir todo lo quels
pueda. OK, con una excepción: escapar / citar caracteres desagradables. Pero, en general, la salida defind
se puede ordenar directamente. Las llamadas inútiles de ls no hacen que todo sea más rápido.-print
o posiblemente-ls
) durante las pruebas. La ventaja de usar-exec ls {}
es que ya ejecuta algo externo para encontrar . Entonces, para cuando cambies dels
amv
, 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 +%j
para encontrar la cantidad de días desde el 1 de enero del año en curso.fuente
-daystart
opció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-mmin
que con-mtime
si 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
stat
y / odate
como en las siguientes frases:BSD / Mac OS X:
Linux:
En ambos casos, el enfoque es utilizar el
date
comando 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 -p
creará esta ruta si aún no existe. Por supuesto, puede usar algunas otrasfind
opciones 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
ls
imprimirá 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