Estou escrevendo um script para criar/copiar arquivos para acelerar o fluxo de trabalho. Neste caso, um diretório precisa ser pesquisado em busca de arquivos que terminem em uma string específica e, se um ou mais forem encontrados, o último na sequência precisa ser direcionado para ser copiado. (Se nenhum for encontrado, o script copia um novo arquivo de um diretório diferente).
Este diretório pode conter vários conjuntos de arquivos que seguem o formato;
YYYYMMDD_##_user_filename.json
Portanto, 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, preciso que o script leia 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 na sequência. Este arquivo deve então ser copiado para a 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
está o diretório para o qual esses arquivos estão sendo movidos - importante porque o script está localizado fora dos diretórios nos quais será atuado e $FILENAME
é apenas uma variável para calcular a localização, data, número da versão, etc.), mas de é claro que isso não ajuda em nada a encontrar o mais recente.
Responder1
Como o número pelo qual você deseja classificar parece ser sempre o segundo campo delimitado por sublinhado, você poderá usar algo como
find path/to/dir/ -maxdepth 1 -name '*parameters.json' | sort -t_ -nk2,2 | tail -n1
Se você precisar lidar com a possibilidade de nomes de arquivos que contenham novas linhas, e seus utilitários principais suportarem isso, você pode transformar todo o comando em delimitado por nulo, por exemplo
find path/to/dir/ -maxdepth 1 -name '*parameters.json' -print0 | sort -zt_ -nk2,2 | tail -zn1