Linux - Apagar os últimos dois arquivos automaticamente

0

No Linux, uma pasta é criada todas as manhãs e cinco arquivos são criados nessa pasta.

No final do dia (meia-noite), os dois últimos arquivos dessa pasta precisam ser excluídos. Como posso conseguir isso?

    
por TheeRU 05.06.2014 / 09:17

2 respostas

3

Sem saber mais informações, você pode usar este comando para selecionar os últimos 2 arquivos desse diretório e excluí-los. Isso pressupõe que você deseja que os dois últimos arquivos que foram modificados sejam excluídos.

$ ls -t | head -n 2 | xargs rm -f

Exemplo

Digamos que eu tenha esses arquivos.

$ seq 5 | xargs -n 1 touch
$ ls -ltr
total 0
-rw-rw-r--. 1 saml saml 0 Jun  5 04:01 1
-rw-rw-r--. 1 saml saml 0 Jun  5 04:01 2
-rw-rw-r--. 1 saml saml 0 Jun  5 04:01 3
-rw-rw-r--. 1 saml saml 0 Jun  5 04:01 4
-rw-rw-r--. 1 saml saml 0 Jun  5 04:01 5

Usar ls -t | head -n 2 me forneceria os dois últimos arquivos modificados.

$ ls -t | head -n 2
5
4

E posso passá-las para xargs rm -f para excluí-las.

$ ls -t | head -n 2 | xargs rm -f
$ ls -tr
total 0
-rw-rw-r--. 1 saml saml 0 Jun  5 04:01 1
-rw-rw-r--. 1 saml saml 0 Jun  5 04:01 2
-rw-rw-r--. 1 saml saml 0 Jun  5 04:01 3
    
por 05.06.2014 / 10:03
2

com zsh

rm -f -- *(D.om[1,2])

excluiria (até) os dois mais novos (em termos de tempo da última modificação) arquivos regulares no diretório atual.

Com ferramentas GNU:

eval "files=($(ls -At --quoting-style=shell-always))"
n=2
for f in "${files[@]}"; do
  if [[ -f $f && ! -L $f ]]; then
    rm -f -- "$f"
    ((--n)) || break
  fi
done
    
por 05.06.2014 / 13:39