ファイル名から特定の単語を削除する

ファイル名から特定の単語を削除する

私のソフトウェアで処理したときに別の名前で表示されるファイルセットがあります(プロセスが正常に完了したことを示します)。

たとえば、入力ファイルはSAM111_tsta.fastqを読み取り、SAM111_tstaAligned.SortbyCoord.bamに出力できます。

コマンドラインでディレクトリを再帰的にフィルタリングし、「Aligned.SortbyCoord.bam」を含むすべてのファイルを見つけて「Aligned.SortbyCoord」のみを削除して「SAM111_tsta」で終わる方法があるかどうか疑問に思います。おじさん?

答え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.bamfind_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

不要なファイルがあると思われるディレクトリで次のコマンドを実行します。

探す。 -私の名前"align.SortbyCoord.bam" | xargs rm -f

まず、findコマンドを実行して必要なファイルを出力として確認し、xargs rm -fを使用して削除することをお勧めします。

関連情報