Eliminar todos los archivos en una carpeta que tenga marca de tiempo en el nombre del archivo

Eliminar todos los archivos en una carpeta que tenga marca de tiempo en el nombre del archivo

Tengo que eliminar todos los archivos de una carpeta cuyos nombres de archivo tengan fcrjlog-11-21-2019-1.txtformato. Quiero eliminar todos los archivos que tengan este tipo de nombre en una carpeta.

Respuesta1

 find . ! -type d -name 'fcrjlog-??-??-????-?.txt' -delete

(reemplace -deletecon -exec rm -f {} +si findno admite la extensión no estándar -delete).

?es el operador comodín que representacualquier personaje. Reemplace con [[:digit:]]para que coincida solo con caracteres de dígitos decimales (0123456789).

! -type dexcluye los archivos de tipodirectorio(que -deleteno se podrían eliminar a menos que estuvieran vacíos de todos modos), puedes reemplazar con -type fpara que sea aún más restrictivo (solo incluyeregulararchivos a excepción de todos los demás tipos de archivos, incluidos enlaces simbólicos, directorios, sockets, FIFO, dispositivos...). GNU findtambién permite -xtype fseleccionar los archivos que se determinan comoregulardespués de la resolución del enlace simbólico.

Reemplace fcrjlogcon *para hacer coincidir cualquier número de caracteres, o ?*para cualquier secuencia de caracteres que no esté vacía, o [!.]*para cualquier secuencia de caracteres que no esté vacía, la primera de las cuales no lo esté .(para excluir archivos ocultos).

Respuesta2

Es habitual mostrar algunas de las cosas que ya has probado; así obtendrás más respuestas. Para esta pregunta, necesita buscar expresiones regulares y comprender algunos de los conceptos. ¿Asumo que las "x" en sus marcas de tiempo son números? Si es así, esta expresión regular le ayudará a empezar:

/tmp>ls | grep -E "[0-9]{2}\-[0-9]{2}\-[0-9]{4}\-[0-9]{1}.txt$"
test-12-12-1234-9.txt

/tmp>rm $(ls | grep -E "[0-9]{2}\-[0-9]{2}\-[0-9]{4}\-[0-9]{1}.txt$")

Desglosando las distintas piezas:

"
 [0-9]{2}  -- Exactly two numeric characters
 -         -- A literal dash "-"
 [0-9]{2}  -- Exactly two numeric characters
 -         -- A literal dash "-"
 [0-9]{4}  -- Exactly four numeric characters
 -         -- A literal dash "-"
 [0-9]     -- One numeric character
 .         -- Any character.  Use \. to insist on a dot
 txt       -- The literal string "txt"
 $         -- An anchor that means the txt has to be at the end of the line
"

información relacionada