Encuentre el último archivo en el directorio donde el final del nombre del archivo coincide con una cadena

Encuentre el último archivo en el directorio donde el final del nombre del archivo coincide con una cadena

Estoy escribiendo un script para crear/copiar archivos para acelerar el flujo de trabajo. En este caso, es necesario buscar en un directorio archivos que terminen en una cadena específica y, si se encuentra uno o más, se debe seleccionar el último de la secuencia para copiarlo. (Si no se encuentra ninguno, el script copia un archivo nuevo desde un directorio diferente).

Este directorio puede contener varios conjuntos de archivos que siguen el formato;

YYYYMMDD_##_user_filename.json

Entonces, una carpeta de ejemplo podría contener lo siguiente;

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

En este caso, necesito que el script lea cualquier archivo que termine en parameters.jsony luego los ordene según su número de versión (01, 02, etc.) para descubrir cuál es el último en la secuencia. Luego, este archivo debe copiarse en la misma carpeta usando el siguiente número de versión. Para este propósito, la fecha es irrelevante y se puede asumir que nunca habrá números de versión duplicados.

estaba usando if [ -e $1/*"parameters.json" ]; then cp $1/*"parameters.json" "$FILENAME"_parameters.json(dónde $1está el directorio al que se mueven estos archivos; importante porque el script se encuentra fuera de los directorios sobre los que se va a actuar y $FILENAMEes solo una variable para calcular la ubicación, fecha, número de versión, etc.) pero de Por supuesto, esto no ayuda en nada a encontrar el más reciente.

Respuesta1

Dado que el número por el que desea ordenar parece ser siempre el segundo campo delimitado por guión bajo, debería poder usar algo como

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

Si necesita manejar la posibilidad de nombres de archivos que contienen nuevas líneas, y sus utilidades principales lo admiten, puede convertir todo el comando en delimitado por nulos, por ejemplo.

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

información relacionada