私が尋ねた前の質問を展開すると、次のようになります。 英数字のファイル名の変更
拡張子が* _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
答え2
Linuxの場合:
rename -v 's/_.*//' *_upstream/