Exclua todos os arquivos em uma pasta com carimbo de data/hora no nome do arquivo

Exclua todos os arquivos em uma pasta com carimbo de data/hora no nome do arquivo

Tenho que remover todos os arquivos de uma pasta cujos nomes de arquivo tenham fcrjlog-11-21-2019-1.txtformato. Quero remover todos os arquivos com esse tipo de nome em uma pasta.

Responder1

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

(substitua -deletepor -exec rm -f {} +se findnão suportar a extensão não padrão -delete).

?é o operador curinga que significaqualquer caractere único. Substitua por [[:digit:]]para corresponder apenas caracteres de dígitos decimais (0123456789).

! -type dexclui os arquivos do tipodiretório(que -deletenão poderia ser removido a menos que estivessem vazios de qualquer maneira), você pode substituir por -type fpara ser ainda mais restritivo (incluir apenasregulararquivos com exceção de todos os outros tipos de arquivos, incluindo link simbólico, diretório, soquete, fifo, dispositivo...). GNU findtambém oferece suporte -xtype fpara selecionar os arquivos que são determinados comoregularapós a resolução do link simbólico.

Substitua fcrjlogpor *para corresponder a qualquer número de caracteres, ou ?*a qualquer sequência de caracteres não vazia, ou [!.]*a qualquer sequência de caracteres não vazia, a primeira das quais não é .(para excluir arquivos ocultos).

Responder2

É comum exibir algumas das coisas que você já tentou - dessa forma você obterá mais respostas. Para esta questão, você precisa pesquisar expressões regulares e compreender alguns dos conceitos. Presumo que o "x" em seus carimbos de data e hora sejam números. Nesse caso, esta expressão regular irá ajudá-lo a começar:

/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$")

Dividindo as várias peças:

"
 [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
"

informação relacionada