Shell-Script

在具有成對名稱的目錄中查找文件

  • August 25, 2015

我正在執行可變大小和內容測試集的測試。經常添加和刪除數據文件。我正在尋找一種自動收集文件列表的方法。

所有文件都在D; 我需要將完整目錄和名稱添加到文本文件中。但是,我只需要那些具有“配對”文件的文件,該文件具有相同的文件名但副檔名不同(所以……不同的文件名,但以結構化的方式)。所以,如果有一個MyFileName.Aand MyFileName.B,那麼我想D/.../MyFileName添加到文件列表中。

.A沒有文件的.B文件,但沒有沒有.B文件的.A文件。如果 a.A有一個.B文件,那麼這兩個文件都在同一個目錄中。

有什麼建議嗎?

如果沒有文件名包含任何換行符,您可以執行以下操作:

find D -type f \( -name '*.A' -o -name '*.B' \) |
 sed 's/\.[^.]*$//' |
 sort |
 uniq -d >paired_files

這應該適用於有.B文件但沒有.A文件的更一般情況。

要使用最新的 GNU 工具處理任何文件名:

find D -type f \( -name '*.A' -o -name '*.B' \) -print0 |
 sed -z 's/\.[^.]*$//' |
 sort -z |
 uniq -dz |
 tr '\0' '\n' >paired_files

如果您的陳述為真“沒有 .A 文件就沒有 .B 文件。”,然後獲取 .B 文件列表並刪除副檔名。

find $directory-to-search -name "*.B" | sed -r -e "s~(.*)\.B~\1~g"

引用自:https://unix.stackexchange.com/questions/137385