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)"
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
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 %nstat --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; 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}'
Tags linux filesystems shell-script