Uma solução é configurar um processo de segundo plano genérico que ouve novos arquivos com nomes bem definidos e renomeia-os automaticamente.
Você pode usar inotifywait
para assistir com eficiência a um diretório como ~/Desktop
para novos arquivos sendo criados (especificamente, fechados após abrir para gravação) e renomeie esse arquivo se for Screenshot.png
para o próximo arquivo mytext999.txt
livre. Aqui está um exemplo. A maior parte do código é a função template
para encontrar o próximo nome de arquivo livre, que não é o objeto da questão.
#!/bin/bash
# https://unix.stackexchange.com/a/418088/119298
# auto rename files when they are written to in watched directory
template(){
local file=$1 max=$2 suffix=$3 pat last next
pat="$file${max//9/[0-9]}$suffix"
for last in $pat; do : ; done
if [ "$last" = "$pat" ]
then next=${max//9/0} # no files, start from 0
else last="${last:${#file}:${#max}}"
[ "$last" = "$max" ] && return 1
printf -v next "%0${#max}d" $((10#$last+1))
fi
newfile="$file$next$suffix"
[ ! -e "$newfile" ]
}
cd ~/Desktop/
inotifywait -m -e close_write ~/Desktop/ |
while read dir event file
do case $file in
Screenshot.png) template mypic 999 .png || exit
mv "$file" "$newfile" ;;
esac
done