I have a directory of .jpg files that continuously grows. I want to copy the most recent one elsewhere. This is what I currently have and it works, just curious if there's a better way to identify the most recent jpg file rather than using ls and tail.#!/bin/bashcd /home/pi/JPGSfn=$(ls -rt1 | tail -1)mv -f $fn /home/pi/WWW/webpic.jpg
Identify and assign most recent file to shell variable
bash;files;timestamps
There's a number of characters in file names that would make that fail. You can improve it with:#! /bin/sh -cd /home/pi/JPGS || exitfn=$(ls -t | head -n1)mv -f -- $fn /home/pi/WWW/webpic.jpgLeaving a variable unquoted in list context (in shells other than zsh) is the split+glob operator, you almost never want to do that. -- marks the end of the options so $fn will not be taken as an option if it starts with -.That still fails if filenames contain newline characters, but not space, tab, star, question mark, right square bracket, or start with dash.Best is to use zsh here:#! /bin/zsh -mv -f /home/pi/JPGS/*.jpg(.om[1]) /home/pi/WWW/webpic.jpg(.om[1]) are globbing qualifiers, they are a zsh specific feature. . restricts the glob to regular files (will not include symlinks, directories, devices...), om is to order on modification time, and [1] to only take the first file.Note that if you want to assign that to a shell variable, that would have to be an array variable:fn=(/home/pi/JPGS/*.jpg(.om[1]))(not that it makes a lot of difference on how you use it later).