script español ejemplos crear unix shell

unix - español - Script de Shell: obtenga todos los archivos modificados después de<date>



shell script linux español (10)

Elimine este repositorio de GitHub: ZFYL/zipper

Si coloca index.php y zipper.php en cualquier lugar de su servidor, a través de la página principal, puede ver los archivos que se modificaron entre dos fechas o comprimirlas.

Fucciones principales:

  • Buscar directorios recursivamente
  • Buscar archivos modificados entre dos fechas / horas dadas
  • Listar esos archivos
  • ZIP esos archivos
  • Excluir rutas con RegEx

Por cierto, esta herramienta PHP es súper rápida y puede ejecutarse a través de 20 000 archivos en 5 segundos en el peor de los casos.

También puede incluir la biblioteca de código zipper.php en cualquier archivo php y funciones integradas de llamada, que puede encontrar descritas en la wiki del repositorio ( Utilizando funciones de la cremallera ZFYL en su código ).

Prefiero no hacer esto en PHP, así que espero que alguien decente en scripts de shell pueda ayudar.

Necesito un script que se ejecute recursivamente en el directorio y encuentre que todos los archivos con la última fecha de modificación son mayores que alguna fecha. Luego, atacará y comprimirá los archivos manteniendo la información de ruta.


Este script encontrará archivos con una fecha de modificación de dos minutos antes y después de la fecha indicada (y puede cambiar los valores en las condiciones según su requisito)

PATH_SRC="/home/celvas/Documents/Imp_Task/" PATH_DST="/home/celvas/Downloads/zeeshan/" cd $PATH_SRC TODAY=$(date -d "$(date +%F)" +%s) TODAY_TIME=$(date -d "$(date +%T)" +%s) for f in `ls`; do # echo "File -> $f" MOD_DATE=$(stat -c %y "$f") MOD_DATE=${MOD_DATE% *} # echo MOD_DATE: $MOD_DATE MOD_DATE1=$(date -d "$MOD_DATE" +%s) # echo MOD_DATE: $MOD_DATE DIFF_IN_DATE=$[ $MOD_DATE1 - $TODAY ] DIFF_IN_DATE1=$[ $MOD_DATE1 - $TODAY_TIME ] #echo DIFF: $DIFF_IN_DATE #echo DIFF1: $DIFF_IN_DATE1 if [[ ($DIFF_IN_DATE -ge -120) && ($DIFF_IN_DATE1 -le 120) && (DIFF_IN_DATE1 -ge -120) ]] then echo File lies in Next Hour = $f echo MOD_DATE: $MOD_DATE #mv $PATH_SRC/$f $PATH_DST/$f fi done

Por ejemplo, si desea que los archivos tengan fecha de modificación antes de la fecha indicada solamente, puede cambiar de 120 a 0 en el parámetro $DIFF_IN_DATE descartando las condiciones del parámetro $DIFF_IN_DATE1 .

De manera similar, si desea que los archivos tengan una fecha de modificación de 1 hora antes y después de la fecha especificada, simplemente reemplace 120 por 3600 en if CONDITION .


Esto debería mostrar todos los archivos modificados en los últimos 7 días.

find . -type f -mtime -7 -print

Mételo en tar / zip, y deberías estar bien.


Esto funcionará para algunos archivos. Desea incluir "-print0" y "xargs -0" en caso de que alguna de las rutas tenga espacios. Este ejemplo busca archivos modificados en los últimos 7 días. Para encontrar los modificados antes de los últimos 7 días, use "+7".

find . -mtime -7 -print0 | xargs -0 tar -cjf /foo/archive.tar.bz2

Como advierte esta página , xargs puede hacer que el comando tar se ejecute varias veces si hay muchos argumentos, y el indicador "-c" podría causar problemas. En ese caso, querrías esto:

find . -mtime -7 -print0 | xargs -0 tar -rf /foo/archive.tar

No puede actualizar un archivo tar comprimido con tar, por lo que tendría que bzip2 o gzip en un segundo paso.


Puede obtener una lista de los archivos modificados por última vez más tarde que x días atrás con:

find . -mtime -x

Entonces solo tiene que tar y zip archivos en la lista resultante, por ejemplo:

tar czvf mytarfile.tgz `find . -mtime -30`

para todos los archivos modificados durante el mes pasado.


Puedes hacer esto directamente con tar e incluso mejor:

tar -N ''2014-02-01 18:00:00'' -jcvf archive.tar.bz2 files

Esto le indica a tar que comprima archivos más nuevos que el 1 de enero de 2014, a las 18:00:00.


Si tiene GNU find , entonces hay una legión de opciones relevantes. El único inconveniente es que la interfaz para ellos es menos que estelar:

  • -mmin n (tiempo de modificación en minutos)
  • -mtime n (tiempo de modificación en días)
  • -newer file (tiempo de modificación más nuevo que la hora de modificación del archivo)
  • -daystart (ajustar la hora de inicio desde la hora actual hasta el comienzo del día)
  • Más alternativas para el tiempo de acceso y el tiempo de ''cambio'' o ''creación''.

La parte difícil es determinar el número de minutos desde un tiempo.

Una opción que vale la pena considerar: use touch para crear un archivo con la marca de tiempo de modificación requerida; luego usa find con -newer .

touch -t 200901031231.43 /tmp/wotsit find . -newer /tmp/wotsit -print rm -f /tmp/wotsit

Esto busca archivos más nuevos que 2009-01-03T12: 31: 43. Claramente, en un script, /tmp/wotsit sería un nombre con el PID u otro valor para hacerlo único; y habría una trap para asegurar que se elimine incluso si el usuario interrumpe, y así sucesivamente.


Simplemente haría lo siguiente para hacer una copia de seguridad de todos los archivos nuevos desde hace 7 días

tar --newer $(date -d''7 days ago'' +"%d-%b") -zcf thisweek.tgz .

tenga en cuenta que también puede reemplazar ''hace 7 días'' con cualquier cosa que se adapte a su necesidad

Puede ser: date -d''yesterday'' +"%d-%b"

O incluso: date -d''first Sunday last month'' +"%d-%b"


bien bajo Linux, intente leer la página man del comando find

man find

algo como esto debería

find . -type f -mtime -7 -print -exec cat {} /; | tar cf - | gzip -9

y lo tienes


tan simple como:

find . -mtime -1 | xargs tar --no-recursion -czf myfile.tgz

donde find . -mtime -1 find . -mtime -1 seleccionará todos los archivos en el directorio actual (recursivamente) modificado el día anterior. puedes usar fracciones, por ejemplo:

find . -mtime -1.5 | xargs tar --no-recursion -czf myfile.tgz