Escribo el siguiente comando para eliminar todos los archivos que tienen más de 7 días, pero no funciona:
find /media/bkfolder/ -mtime +7 -name'*.gz' -exec rm {} \;
¿Cómo puedo eliminar estos archivos?
Escribo el siguiente comando para eliminar todos los archivos que tienen más de 7 días, pero no funciona:
find /media/bkfolder/ -mtime +7 -name'*.gz' -exec rm {} \;
¿Cómo puedo eliminar estos archivos?
Respuestas:
Como @Jos señaló que te perdiste un espacio entre name
y '*.gz'
; También para acelerar el uso de comandos -type f
opción de ejecutar el comando en f iles solamente.
Entonces el comando fijo sería:
find /path/to/ -type f -mtime +7 -name '*.gz' -execdir rm -- '{}' \;
find
: El comando UNIX para encontrar f iles / d irectories / l tintas y etc./path/to/
: el directorio para comenzar su búsqueda.-type f
: solo busca archivos.-name '*.gz'
: enumera los archivos que terminan en .gz
.-mtime +7
: solo considere los que tienen un tiempo de modificación mayor a 7 días.-execdir ... \;
: para cada resultado encontrado, realice el siguiente comando en ...
.rm -- '{}'
: eliminar el archivo; la {}
parte es donde se sustituye el resultado de la búsqueda de la parte anterior. --
significa que los parámetros de fin de comando evitan el error de solicitud para aquellos archivos que comienzan con guión .find /path/to/ -type f -mtime +7 -name '*.gz' -print0 | xargs -r0 rm --
Del hombre encuentra :
-print0
True; print the full file name on the standard output, followed by a null character
(instead of the newline character that -print uses). This allows file names that contain
newlines or other types of white space to be correctly interpreted by programs that process
the find output. This option corresponds to the -0 option of xargs.
Lo cual es un poco más eficiente, porque equivale a:
rm file1 file2 file3 ...
Opuesto a:
rm file1; rm file2; rm file3; ...
como en el -exec
método
Un comando alternativo y también más rápido es usar el +
terminador de exec en lugar de\;
:
find /path/to/ -type f -mtime +7 -name '*.gz' -execdir rm -- '{}' +
Este comando se ejecutará rm
solo una vez al final en lugar de cada vez que se encuentre un archivo y este comando es casi tan rápido como usar la -delete
opción que se muestra en moderno find
:
find /path/to/ -type f -mtime +7 -name '*.gz' -delete
-delete
al final? ¿Por qué meterse con el +
o \;
?
Tenga cuidado al eliminar archivos con find. Ejecute el comando con -ls para verificar lo que está eliminando
find /media/bkfolder/ -mtime +7 -name '*.gz' -ls
. Luego, abra el comando del historial y agregue-exec rm {} \;
Limite el daño que puede hacer un comando de búsqueda. Si desea eliminar archivos de un solo directorio, -maxdepth 1
evita que find recorra los subdirectorios o busque en el sistema completo si escribe /media/bkfolder /
.
Otros límites que agrego son argumentos de nombre más específicos -name 'wncw*.gz'
, como agregar un tiempo más reciente -mtime -31
y citar los directorios buscados. Estos son particularmente importantes si está automatizando limpiezas.
find "/media/bkfolder/" -maxdepth 1 -type f -mtime +7 -mtime -31 -name 'wncw*.gz' -ls -exec rm {} \;
name
y'*.gz'
.