在目錄中尋找具有配對名稱的文件

在目錄中尋找具有配對名稱的文件

我正在運行可變大小和內容測試集的測試。資料檔案經常會新增和刪除。我正在尋找一種自動收集文件清單的方法。

所有檔案都位於D;的子目錄中我需要將完整目錄和名稱添加到文字檔案中。但是,我只需要那些具有“配對”文件的文件,該文件具有相同的文件名但具有不同的擴展名(所以......不同的文件名,但以結構化方式)。所以,如果有MyFileName.AMyFileName.B,那麼我想D/.../MyFileName添加到文件列表中。

.A沒有.B文件的文件,但沒有.B沒有.A文件的文件。如果 a.A有一個.B文件,則兩個文件位於同一目錄中。

有什麼建議嗎?

答案1

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

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

答案2

如果您的陳述是正確的“沒有 .A 檔案就沒有 .B 檔案。”,則取得 .B 檔案清單並刪除副檔名。

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

答案3

zsh

print -rl mydir/**/*.A(.e_'REPLY=$REPLY:r; [[ -f $REPLY.B ]]'_)

:r刪除擴展名,因此如果運行後$REPLYwas的內容變為; 其餘的類似mydir/somedir/somefile.AREPLY=$REPLY:rmydir/somedir/somefile
這個答案

相關內容