![Eliminar todos los archivos en una carpeta que tenga marca de tiempo en el nombre del archivo](https://rvso.com/image/164724/Eliminar%20todos%20los%20archivos%20en%20una%20carpeta%20que%20tenga%20marca%20de%20tiempo%20en%20el%20nombre%20del%20archivo.png)
Tengo que eliminar todos los archivos de una carpeta cuyos nombres de archivo tengan fcrjlog-11-21-2019-1.txt
formato. Quiero eliminar todos los archivos que tengan este tipo de nombre en una carpeta.
Respuesta1
find . ! -type d -name 'fcrjlog-??-??-????-?.txt' -delete
(reemplace -delete
con -exec rm -f {} +
si find
no 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 d
excluye los archivos de tipodirectorio(que -delete
no se podrían eliminar a menos que estuvieran vacíos de todos modos), puedes reemplazar con -type f
para 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 find
también permite -xtype f
seleccionar los archivos que se determinan comoregulardespués de la resolución del enlace simbólico.
Reemplace fcrjlog
con *
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
"