
Estou tentando excluir arquivos antigos, mas devo manter os arquivos de log dos últimos 3 dias. Tentei o comando abaixo,
ls -tr /home/httpd/htdocs/nome do caminho/nome do caminho/config//build/logs/apps/.log | cauda -n +4 | xargs rm --
mas foi excluído, todos os arquivos retêm apenas 3 arquivos em uma pasta. mas quero manter 3 arquivos em cada pasta separadamente.
alguém pode me ajudar a resolver esse problema.
Responder1
Você pode tentar isso, colocar o seguinte conteúdo em um arquivo de script de shell e executá-lo.
#!/bin/bash
dirs=($(find /tmp/test -type d))
for dir in "${dirs[@]}"; do
cd "$dir"
ls -pt | grep -v / | tail -n +4 | xargs rm -f
done
substitua /tmp/test
pelo nome do seu diretório.
Responder2
Você poderia usar este comando:
ls -t path | sed -e '1,3d' | xargs -d '\n' rm
Ou em um loop:
for d in $(find path -type d); do
ls -t "$d" | sed -e '1,3d' | xargs -d '\n' rm
done
Onde:
ls -t
: lista os arquivos em ordem decrescente de hora de modificação, um nome de arquivo por linha.sed -e '1,3d'
: exclui as 3 primeiras linhasxargs -d '\n' rm
: para cada linha de entrada (sem a nova linha final), passa-a como um argumento pararm
.-d '\n'
: isso é necessário para eficiência, para fazer com que xargs considere cada linha de entrada um argumento separado, mas passe quantos argumentos couberem em uma linha de comando de uma só vez, para que rm não seja invocado novamente para cada um.
Para mais possibilidades, veja a postagem Exclua todos os arquivos X, exceto os mais recentes, no bash.