
Estoy intentando eliminar archivos antiguos, pero debo conservar los archivos de registro de los últimos 3 días. Probé el siguiente comando:
ls -tr /home/httpd/htdocs/nombre de ruta/nombre de ruta/config//build/logs/aplicaciones/.log | cola -n +4 | xargs rm---
pero se eliminó, todos los archivos conservan solo 3 archivos en una carpeta. Pero quiero conservar 3 archivos en cada carpeta por separado.
¿Alguien puede ayudarme a resolver este problema?
Respuesta1
Puede intentar esto, colocar el siguiente contenido en un archivo de script de shell y ejecutarlo.
#!/bin/bash
dirs=($(find /tmp/test -type d))
for dir in "${dirs[@]}"; do
cd "$dir"
ls -pt | grep -v / | tail -n +4 | xargs rm -f
done
reemplácelo /tmp/test
con el nombre de su directorio.
Respuesta2
Podrías usar este comando:
ls -t path | sed -e '1,3d' | xargs -d '\n' rm
O en bucle:
for d in $(find path -type d); do
ls -t "$d" | sed -e '1,3d' | xargs -d '\n' rm
done
Dónde:
ls -t
: enumera los archivos en orden decreciente de tiempo de modificación, un nombre de archivo por línea.sed -e '1,3d'
: elimina las primeras 3 líneasxargs -d '\n' rm
: para cada línea de entrada (sin la nueva línea final), la pasa como argumento arm
.-d '\n'
: esto es necesario por razones de eficiencia, para hacer que xargs considere cada línea de entrada como un argumento separado, pero pase tantos argumentos como quepan en una línea de comando a la vez, de modo que rm no se vuelva a invocar para cada uno.
Para más posibilidades ver el post Eliminar todos los archivos X excepto los más recientes en bash.