Há vários caracteres em nomes de arquivos que causariam falha. Você pode melhorar com:
#! /bin/sh -
cd /home/pi/JPGS || exit
fn=$(ls -t | head -n1)
mv -f -- "$fn" /home/pi/WWW/webpic.jpg
Deixar uma variável sem aspas no contexto da lista (em shells que não sejam zsh
) é o operador split + glob, você quase nunca quer fazer isso. --
marca o final das opções, então "$fn"
não será considerado uma opção se começar com -
.
Isso ainda falhará se os nomes de arquivo contiverem caracteres de nova linha, mas não espaço, guia, estrela, ponto de interrogação, colchete direito ou início com traço.
O melhor é usar zsh
aqui:
#! /bin/zsh -
mv -f /home/pi/JPGS/*.jpg(.om[1]) /home/pi/WWW/webpic.jpg
(.om[1])
são qualificadores glob, eles são um recurso específico de zsh
. .
restringe o glob para arquivos regulares (não incluirá links simbólicos, diretórios, dispositivos ...), om
é para o rder em m tempo de modificação e [1]
para pegar somente o primeiro arquivo.
Observe que, se você quiser atribuir isso a uma variável shell, isso deve ser uma variável de matriz:
fn=(/home/pi/JPGS/*.jpg(.om[1]))
(não que isso faça muita diferença em como você o usa mais tarde).