私のソフトウェアで処理すると、異なる名前で出力されるファイル セットがあります (プロセスが正常に完了したことを示します)。
たとえば、入力ファイルは 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
そうでない場合は、簡単なシェル関数を作成してそれを実行できます。
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
不要なファイルが存在すると思われるディレクトリで以下のコマンドを実行します。
. -iname を検索しますAligned.SortbyCoord.bam" | xargs rm -f
最初に find コマンドを実行して、必要なファイルが出力されることを確認してから、xargs rm -f を使用してそれらを削除することをお勧めします。