Shell-Script
在具有成對名稱的目錄中查找文件
我正在執行可變大小和內容測試集的測試。經常添加和刪除數據文件。我正在尋找一種自動收集文件列表的方法。
所有文件都在
D
; 我需要將完整目錄和名稱添加到文本文件中。但是,我只需要那些具有“配對”文件的文件,該文件具有相同的文件名但副檔名不同(所以……不同的文件名,但以結構化的方式)。所以,如果有一個MyFileName.A
andMyFileName.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"