move um arquivo que corresponda a um padrão em um script de shell

2

Eu preciso mover o arquivo mais recente em um diretório onde o nome do arquivo corresponda a uma convenção de nomenclatura "ServicesWebApp".

Exemplo: existe um diretório com 5 arquivos com nomes semelhantes.

ServicesWebApp-1005.war  created on 3/10/2016
ServicesWebApp-1004.war  created on 3/09/2016
ServicesWebApp-1003.war  created on 3/08/2016
ServicesWebApp-1002.war  created on 3/07/2016
ServicesWebApp-1001.war  created on 3/06/2016

Eu preciso mover o mais recente para outro diretório, neste exemplo seria. ServiçosWebApp-1005.war criado em 10/03/2016

    
por Byron 10.03.2016 / 20:04

4 respostas

1

Você também pode usar um oneliner se confiar em seus timestamps.

mv $(ls -tr ServicesWebApp* | tail -1) /tmp/

Ou se preferir confiar nos nomes dos arquivos.

mv $(ls ServicesWebApp* | sort -n | tail -1) /tmp/
    
por 10.03.2016 / 20:25
1

Você também pode tentar este:

mv $(find . -type f -name "ServicesWebApp*" -printf "%T@ %f\n" | sort -n | awk '{print $2}' | tail -1 ) /new/file/path/
    
por 10.03.2016 / 20:25
0
tstamp=0
file=
for f in ServicesWebApp*
do
  y=$(stat -c "%Y" "$f")
  if [ $y -gt $tstamp ]
  then
    file="$f"
    tstamp=$y
  fi
done
echo cp "$file" /somewhere/else
    
por 10.03.2016 / 20:12
0

Você pode tentar executar uma linha usando a subcategoria de comandos

$ mv $(ls -t /location/path/ServicesWebApp* | head -n1) /to/new/destination/path

Indo adiante

$ ls -t /location/path/ServicesWebApp* | head -n1
/location/path/ServicesWebApp-1005.war

Portanto, o comando deve ser interpretado como

$ mv /location/path/ServicesWebApp-1005.war /to/new/destination/path
    
por 10.03.2016 / 20:17