從檔案名稱中刪除某些單字

從檔案名稱中刪除某些單字

我有一組文件,當在我的軟體中處理時,它們會以不同的名稱出現(表示它成功完成了該過程)。

例如,輸入檔案可能會讀取 SAM111_tsta.fastq,然後輸出為 SAM111_tstaAligned.SortbyCoord.bam。

我想知道,是否有一種方法(透過命令列)遞歸地篩選目錄並找到所有具有“Aligned.SortbyCoord.bam”並且僅刪除“Aligned.SortbyCoord”的文件,以便我最終得到“SAM111_tsta” .bam?

答案1

如果您發現類似。您應該能夠執行以下操作:

find dir -name '*_tstaAligned.SortbyCoord.bam' -exec bash -c 'mv "$0" "${0/_tstaAligned.SortbyCoord.bam/_tsta.bam}"' "{}" \;

儘管使用了 bash ${var//find_all/substitute_with_this},但您只會匹配以 結尾的文件,_tstaAligned.SortbyCoord.bam因為這是給find.但是_tstaAligned.SortbyCoord.bam,如果任何檔案有多個,您將替換名稱中出現的所有。 (我猜不太可能。)

為了進行測試,請執行以下操作:

find dir -name '*tstaAligned.SortbyCoord.bam' -exec bash -c 'printf "mv \"%s\" \"%s\"\n" "$0" "${0/_tstaAligned.SortbyCoord.bam/_tsta.bam}"' "{}" \;

答案2

有重命名指令,

find -name '*Aligned.SortbyCoord.bam' -exec rename Aligned.SortbyCoord '' + \;

事實證明是在實用程式Linux所以你必須安裝它,該軟體包中有一些不錯的東西。

或者你可以用以下命令修復一個簡單的列表

find -name '*Aligned.SortbyCoord.bam' \
| sed -E 's/(.*)Aligned.*/mv "&" "\1.bam"/e'

如果你的 sed 夠新,或者

find -name '*Aligned.SortbyCoord.bam' \
| sed -E 's/(.*)Aligned.*/mv "&" "\1.bam"/' \
| sh -x

如果不是,或者你可以建立一個快速 shell 函數來完成它,

doit () { while read; do mv "$REPLY" "${REPLY%Aligned*}.bam"; done; }
find -name '*Aligned.SortbyCoord.bam' | doit

或作為單線

find -name '*Aligned.SortbyCoord.bam' | while read f; do mv "$f" "${f%A*}.bam"; done

答案3

在您懷疑存在不需要的檔案的目錄中執行以下命令:

尋找 。 -我的名字 ”對齊.SortbyCoord.bam" | xargs rm -f

我建議先執行 find 命令來驗證作為輸出的所需文件,然後使用 xargs rm -f 刪除它們。

相關內容