同じ区切り文字を使用して複数のインスタンスのディレクトリ名を切り取る(シェル)

同じ区切り文字を使用して複数のインスタンスのディレクトリ名を切り取る(シェル)

名前を変更したいディレクトリがあります。たとえば、次のようになります。10-00017_S9_L001_plasmidspades_careful

10-00017_S9_L001セクション名を変更したい。

cutコマンドを使用してみましたecho "$filename" | cut -d'_' -f3が、ファイル名のL001部分のみが残りました。

明らかに手動で名前を変更できますが、何百ものディレクトリがあり、時間がありません。

cutコマンドを使用して区切り文字の特定のインスタンスの前のすべての項目を取得する方法はありますか?それとも実際に使用できる他の項目はありますか?

ベストアンサー1

最善の解決策は、rename(Debian)またはprename(RedHat)(同じコマンド、別の名前)を使用することです(これらのパッケージは標準のデプロイリポジトリから追加する必要があるかもしれません)。正規表現(Perlスタイル)を使用してください。たとえば、競争に厳しくなるように努力してみてください。

rename -n 's/(\d+_\d+_S\d_L\d+)_.+/$1/' *

またはより緩く:

rename -n 's/(.+_.+_.+_.+)_.+/$1/' *

実際の実行のために-n何をするか、削除(またはで置き換える方が良い)を示します。-v

bashがバックスラッシュとドルを変更しないようにするには、パターンの周りに一重引用符を記録します。

おすすめ記事