[solucionado] Como puedo hacer este comando simple?

Iniciado por venadHD, 15 Agosto 2015, 16:12 PM

0 Miembros y 1 Visitante están viendo este tema.

venadHD

Bueno, hasta hace unos dias, estaba 'hosteando' unos servidores de juegos y decidí a crear un comando para que el servidor no exceda la cuota de espacio (porque el servidor no respeta el FTP)
.
Bien, tenia este comando que detectaba el tamaño de los archivos y los borraba

Código (bash) [Seleccionar]
find /home/ftp -size +150M -exec rm {} \;

Pero... Como puedo hacer que coja el tamaño del directorio total, ysi excede.. Que elimine el ultimo archivo modificado?
PD: Existiria alguna forma de poner una "excepcion" de archivos y que pase al siguiente, por ejemplo: "archivo que no puede borrar: internal.db", y si el ultimo modificado es "internal.db" y el segundo despues es "texto.txt", que elimine "texto.txt" y no "internal.db", nose si me explique, es un poco complicado todo

WIитX

Porque no creas a cada FTP 1 usuario a el usuario le creas cuotas y le pones que le avise cuando valla a llenar el disco cuando le queden no 300MB o algo así
"Es más divertido hacerse pirata que unirse a la marina." (Steve Jobs)

venadHD

Cita de: WIитX en 15 Agosto 2015, 16:40 PM
Porque no creas a cada FTP 1 usuario a el usuario le creas cuotas y le pones que le avise cuando valla a llenar el disco cuando le queden no 300MB o algo así

Porque el servidor en sí puede crear archivos y escribirlos, por eso el metodo 'anti-llenado' de disco duro, al execeder X tamaño, eliminar el ultimo archivo

MinusFour

Creo que puedes hacer:

Código (bash) [Seleccionar]

find /home/ftp -type d -size +150M -exec rm {} \;



-type c
              File is of type c:

              b      block (buffered) special

              c      character (unbuffered) special

              d      directory

              p      named pipe (FIFO)

              f      regular file

              l      symbolic link; this is never true if the -L option or
                     the -follow option is in effect, unless the symbolic
                     link is broken.  If you want to search for symbolic
                     links when -L is in effect, use -xtype.

              s      socket

              D      door (Solaris)

venadHD

#4
Cita de: MinusFour en 15 Agosto 2015, 18:34 PM
Creo que puedes hacer:

Código (bash) [Seleccionar]

find /home/ftp -type d -size +150M -exec rm {} \;



-type c
             File is of type c:

             b      block (buffered) special

             c      character (unbuffered) special

             d      directory

             p      named pipe (FIFO)

             f      regular file

             l      symbolic link; this is never true if the -L option or
                    the -follow option is in effect, unless the symbolic
                    link is broken.  If you want to search for symbolic
                    links when -L is in effect, use -xtype.

             s      socket

             D      door (Solaris)

Pero lo que tu dices elimina el directorio, la cosa es que eliminara un archivo, o al servidor le quitara el permiso de escritura, de esa forma no podria escribir en el directorio:

Estuve haciendo este script pero da mas errores.. No sé nada de linux, quizas sea por eso XD (ni cerrar la condicional)
Código (bash) [Seleccionar]
root@venad1:~# bash rbf.sh
': not a valid identifier`limitdisk
': not a valid identifier`directdisk
rbf.sh: line 10: syntax error near unexpected token `fi'
rbf.sh: line 10: `      fi'
root@venad1:~#


El script xD
Código (bash) [Seleccionar]
#! /bin/bash
typeset -i limitdisk
typeset -i directdisk
limitdisk=1610612736
directdisk=$(du -bs /home/ftp/oqq77888)
if [$directdisk -ge $limitdisk] then
echo "Espacio libre excedido"
else
echo "espacio no excedido"
fi


Aunque bueno, lo mismo que tu has dicho.. podria hacerlo asi:

Código (bash) [Seleccionar]
find /home/ftp -type d -size +1500M -exec chmod 555 /home/ftp/oqq77888/mta-server \;
Funcionaria, no?

PD: Un poco cochino mi numero de mensajes no?

MinusFour

No habia visto que era solo para el ultimo achivo modificado   

Código (bash) [Seleccionar]
find /home/ftp -type d -size +150M -exec rm $(ls -1t {} | head -n 1) \;

Pero hay que tener mucho cuidado con los directorios....

venadHD

Cita de: MinusFour en 15 Agosto 2015, 19:11 PM
No habia visto que era solo para el ultimo achivo modificado   

Código (bash) [Seleccionar]
find /home/ftp -type d -size +150M -exec rm $(ls -1t {} | head -n 1) \;

Pero hay que tener mucho cuidado con los directorios....

Cuidado con los directorios? Ese script que pusiste puede borrar un directorio sin querer?, alternativamente, como podria hacer para que no borrara determinados archivos? tanto nombre como extension "internal.db", "mtaserver.conf", "acl.xml", etc etc

MinusFour

Cita de: venadHD en 15 Agosto 2015, 19:41 PM
Cuidado con los directorios? Ese script que pusiste puede borrar un directorio sin querer?, alternativamente, como podria hacer para que no borrara determinados archivos? tanto nombre como extension "internal.db", "mtaserver.conf", "acl.xml", etc etc

Cuando tu haces:

Código (bash) [Seleccionar]

ls -1t


Te devuelve el ultimo fichero modificado y estos pueden ser directorios tambien. Igual es mejor tener un script separado que busque dentro del directorio el ultimo archivo modificado y que excluya directorios.

venadHD

Cita de: MinusFour en 15 Agosto 2015, 20:00 PM
Cuando tu haces:

Código (bash) [Seleccionar]

ls -1t


Te devuelve el ultimo fichero modificado y estos pueden ser directorios tambien. Igual es mejor tener un script separado que busque dentro del directorio el ultimo archivo modificado y que excluya directorios.

Hmm, me pondre a investigar sobre eso xD