Script de bash para remover o arquivo mais antigo de uma pasta

5

Eu quero fazer um script bash para excluir o arquivo antigo de uma pasta. Toda vez que eu executar o script será excluído apenas um arquivo, o mais antigo. Você pode me ajudar com isto? Obrigado

    
por antiks 12.11.2015 / 08:54

3 respostas

9

Como Kos apontou, pode não ser possível conhecer o arquivo mais antigo (conforme a data de criação).

Se o horário da modificação for bom para você e se o nome do arquivo não tiver uma nova linha:

rm "$(ls -t | tail -1)"
    
por 12.11.2015 / 09:28
2

Parece que você está bem com a exclusão do arquivo modificado mais antigo em vez do arquivo criado mais antigo;

Eu considero que este é o método mais seguro, pois não vai quebrar em nomes de arquivos contendo novas linhas:

stat --printf='%Y %n
% touch file1
% touch file2
% stat -c '%Y %n' *            
1447318965 file1
1447318966 file2
% stat --printf='%Y %n
stat --printf='%Y %n
% touch file1
% touch file2
% stat -c '%Y %n' *            
1447318965 file1
1447318966 file2
% stat --printf='%Y %n%pre%' * | sort -z | sed -zn '1s/[^ ]\{1,\} //p' | xargs -0 rm 
% ls
file2
' * | sort -z | sed -zn '1s/[^ ]\{1,\} //p' | xargs -0 rm
' * | sort -z | sed -zn '1s/[^ ]\{1,\} //p' | xargs -0 rm % ls file2
' * | sort -z | sed -zn '1s/[^ ]\{1,\} //p' | xargs -0 rm
  • stat --printf='%Y %nsort -z' * : imprime uma lista separada por NUL do tempo da última modificação seguido pelo caminho do arquivo para cada arquivo no diretório de trabalho atual;
  • sed -zn '1s/[^ ]\{1,\} //p' : classifica a lista usando o NUL como o separador de linha;
  • xargs -0 rm : remove a primeira ocorrência de uma cadeia contendo um ou mais caracteres, não um espaço seguido por um espaço da primeira linha terminada em NUL e imprime-a;
  • rm : passa a linha terminada em NUL para %code% como argumento;
%pre%     
por 12.11.2015 / 10:15
0

Para determinar o arquivo mais antigo de acordo com o "Tempo de acesso" ou "Modificar hora"?

Se for o segundo, basta usar o seguinte comando:

rm  ls -l --sort=time  | sed -n 2p  | awk '{print $NF}'
    
por 12.11.2015 / 09:09