Encontre o último arquivo no diretório onde o final do nome do arquivo corresponde a uma string

1

Estou escrevendo um script para criar / copiar arquivos para acelerar o fluxo de trabalho. Nesta instância, um diretório precisa ser pesquisado por arquivos que terminam em uma string específica, e se um ou mais for encontrado, o último da seqüência precisa ser direcionado para ser copiado. (Se nenhum for encontrado, o script copia um novo arquivo de um diretório diferente).

Esse diretório pode conter vários conjuntos de arquivos que seguem o formato;

YYYYMMDD_##_user_filename.json

Assim, uma pasta de exemplo pode conter o seguinte:

20161021_01_test_parameters.json
20161021_01_test_stack.json
20161021_02_test_parameters.json
20161021_02_test_stack.json
20161022_03_test_parameters.json
20161025_04_test_parameters.json
20161025_04_test_stack.json

Neste caso, eu preciso do script para ler qualquer arquivo que termine em parameters.json e, em seguida, classifique-os com base no número da versão (01, 02, etc) para descobrir qual é o último da sequência. Este arquivo deve então ser copiado na mesma pasta usando o próximo número de versão. Para este propósito, a data é irrelevante e você pode assumir que nunca haverá números de versão duplicados.

Eu estava usando if [ -e $1/*"parameters.json" ]; then cp $1/*"parameters.json" "$FILENAME"_parameters.json (onde $1 é o diretório em que esses arquivos estão sendo movidos - importante porque o script está localizado fora dos diretórios a serem manipulados e $FILENAME é apenas uma variável para calcular a localização, data, número de versão, etc), mas é claro que isso não faz nada sobre encontrar o mais recente.

    
por Alex 26.10.2016 / 19:25

1 resposta

2

Como o número no qual você deseja classificar parece ser sempre o segundo campo delimitado por sublinhado, você deve poder usar algo como

find path/to/dir/ -maxdepth 1 -name '*parameters.json' | sort -t_ -nk2,2 | tail -n1

Se você precisa lidar com a possibilidade de nomes de arquivos que contêm novas linhas, e seus utilitários principais o suportam, você pode transformar todo o comando delimitado por nulo, por exemplo,

find path/to/dir/ -maxdepth 1 -name '*parameters.json' -print0 | sort -zt_ -nk2,2 | tail -zn1
    
por 26.10.2016 / 19:58

Tags