特定の拡張子でディレクトリ名を変更する

特定の拡張子でディレクトリ名を変更する

私が尋ねた前の質問を展開すると、次のようになります。 英数字のファイル名の変更

拡張子が* _upstreamのサブディレクトリを含むディレクトリがあります。

DHX30_vs_Control18.txt_events_without_u2af1_srsf2_altexons_upstream
GEMIN5_vs_Control19.txt_events_without_u2af1_srsf2_altexons_upstream

最初の「_」以降のすべての項目を削除して名前を変更したいと思います。

DHX30
GEMIN5

ベストアンサー1

for dir in ./*_*_upstream/
do 
  mv -- "$dir" "${dir%%_*}"
done

上記のループは、パターンに一致する現在のディレクトリのすべてのディレクトリを選択します(末尾のスラッシュが実行します): "(something)underscore(something)underscore upstream")。次に、最も長い一致を削除するには、パラメータ拡張を使用してこれらのディレクトリの名前を変更します。つまり、最初の下線とその後のすべての項目を削除する「下線(何でも)」です。

たとえば、

設定:

mkdir DHX30_foo_upstream
mkdir GEMIN5_vs_Cblah_upstream
touch DX31_foo_upstream

結果:

$ tree
.
├── DHX30
├── DX31_foo_upstream
└── GEMIN5

2 directories, 1 file

おすすめ記事