次のようないくつかのシンボリックリンクファイルといくつかの一般的なファイルがあります。
P_2_UC34_31_1.gz
P_2_UC34_31_2.gz
P_2_UC34_32_1.gz
P_2_UC34_32_2.gz
P_2_UC34_33_1.gz
P_2_UC34_33_2.gz
P_2_UC34_31_1.gz
そしてP_2_UC34_31_2.gz
シンボリックリンクです。残りの4つのファイルは一般的なファイルです(シンボリックリンクではありません)。
すべてのファイルの_Ms
移行中に追加しようとしました_1
。_2
シンボリックリンクの場合は、次のことを試しました。
sed -i --follow-symlinks 's/_1/_Ms&/g' *.gz
しかし、それはうまくいきませんでした。エラーは発生せず、ファイル名も変更されません。
出力が次のようになります。
P_2_UC34_31_Ms_1.gz
P_2_UC34_31_Ms_2.gz
P_2_UC34_32_Ms_1.gz
P_2_UC34_32_Ms_2.gz
P_2_UC34_33_Ms_1.gz
P_2_UC34_33_Ms_2.gz
答え1
質問作成者のコメント:
わかりました、私はこの方法を使用しましたが、うまくいきました。
for file in *_1.gz; do
mv "$file" "${file%_1.fq.gz}_Ms_1.fq.gz";
done
またはrename
。perl-rename
スクリプトで何かを変更する必要がある場合は、いくつかのマイナーな修正が必要です。
for file in *_1.fq.gz; do
mv "$file" "${file%_1.fq.gz}_Ms_1.fq.gz";
done
元の問題の解決策は次のとおりです。
for x in 1 2; do
for file in *_${x}.gz; do
mv "$file" "${file%_${x}.gz}_Ms_${x}.gz";
done
done
(複雑な内部表現は試してみる価値があります。file="aaaa_1.gz"; x=1; echo mv "$file" "${file%_${x}.gz}_Ms_${x}.gz"; echo output is mv aaaa_1.gz aaaa_Ms_1.gz
)
私は以下を追加します:
sed
問題は(ファイル名を変更せずにテキストのみを変更すること)またはシンボリックリンク(スクリプトによって名前が変更されること)とは関係ありません。
%
それがシナリオで最高の部分です"${file%_1.fq.gz}_Ms.....
。そこで${file}
変数の内容が拡張されますが(可能であれば)、最後から文字列を削除する必要があることfile
を示します。%_1.fq.gz
_1.fq.gz
その部分が_Ms.....
文字列に追加されました。