Eu já vi muitas perguntas e respostas aqui usando uma construção ao longo das linhas de
list_dir=`ls -t /path/to/dir/`
for i in $list_dir; do
ou
ls -t | while read i; do
Agora, eu sei que você não deve usar ls em scripts porque ele quebra facilmente; mas não consigo encontrar uma maneira melhor de operar arquivos, desde a última modificação até a mais recente (ou vice-versa).
Eu posso usar algo como:
find . -type f -printf '%T@ %p\n' | sort -n | cut -d ' ' -f 2- | while read i; do...
... mas isso ainda será interrompido com qualquer arquivo que tenha novas linhas em seus nomes e seja muito mais feio de inicializar. Existe uma maneira melhor?
--zero-terminated
- obrigado por isso, eu gostaria de poder lhe dar ainda mais pontos!info ls
: se eu queria um script à prova de balas com ls, qual--quoting-style
devo usar?--quoting-style=escape
é o caminho para escolher.ls
--quoting-style
falha (para analisar propositalmente) porque ele apenas cita nomes de arquivos: quando você tem um espaço no nome de um grupo. Ok, é um caso muito difícil, mas ele aparece no cygwin bash shell, aqui você tem nomes de grupos comoDomain Users
.A maneira mais fácil, de longe, é usar o zsh. O qualificador glob classifica as
om
correspondências em ordem cronológica inversa; useOm
para ordem cronológica.O
N
qualificador glob faz com que o padrão se expanda para uma lista vazia se o diretório estiver vazio. Faça isso*(DNom)
para corresponder aos arquivos de ponto.fonte