尋找目錄中文件名結尾與字串相符的最後一個文件

尋找目錄中文件名結尾與字串相符的最後一個文件

我正在編寫一個腳本來創建/複製文件以加快工作流程。在這種情況下,需要在目錄中搜尋以特定字串結尾的文件,如果找到一個或多個文件,則需要將序列中的最後一個作為複製目標。 (如果沒有找到,腳本會從不同的目錄複製一個新檔案)。

該目錄可以包含多組文件,這些文件都遵循以下格式;

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

相關內容