查找目录中文件名结尾与字符串匹配的最后一个文件

查找目录中文件名结尾与字符串匹配的最后一个文件

我正在编写一个脚本来创建/复制文件以加快工作流程。在这种情况下,需要在目录中搜索以特定字符串结尾的文件,如果找到一个或多个文件,则需要将序列中的最后一个作为复制目标。 (如果没有找到,脚本会从不同的目录复制一个新文件)。

该目录可以包含多组文件,这些文件都遵循以下格式;

YYYYMMDD_##_user_filename.json

因此示例文件夹可能包含以下内容;

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

在这种情况下,我需要脚本读取以 结尾的任何文件parameters.json,然后根据版本号(01、02 等)对它们进行排序,以发现哪个是序列中的最后一个。然后应使用下一个版本号将该文件复制到同一文件夹中。为此,日期是无关紧要的,您可以假设永远不会有重复的版本号。

我正在使用if [ -e $1/*"parameters.json" ]; then cp $1/*"parameters.json" "$FILENAME"_parameters.json$1这些文件正在移动的目录在哪里 - 很重要,因为脚本位于要执行操作的目录之外,并且$FILENAME只是一个用于计算位置、日期、版本号等的变量)但是当然,这对于查找最新的没有任何作用。

答案1

由于您要排序的数字似乎始终是第二个下划线分隔的字段,因此您应该能够使用类似的内容

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

如果您需要处理包含换行符的文件名的可能性,并且您的核心实用程序支持它,您可以将整个命令转为空分隔,例如

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

相关内容