どうすれば複数のファイルの名前を変更できますか、
IonXpress_049.T11014.R_2014_11_13_11_26_35_user_PR2-41-Pooling0026_3140_13112014.bam
IonXpress_050.T11114.R_2014_11_13_11_26_35_user_PR2-41-Pooling0026_3140_13112014.bam
に、
T11014.bam
T11114.bam
コマンドラインから名前を変更する方法はいくつかあります。こちらがワンライナーです。 .bam
ファイルがあるディレクトリに移動して、これを試してください。
for i in *.bam; do mv "$i" "$(echo $i | awk -F"." '{print $2}').bam"; done
for i in * .bam do mv source destination done
awk
を使用して、.
で区切られた文字列の2番目のフィールドとして保持する部分を抽出します。$ echo IonXpress_049.T11014.R_2014_11_13_11_26_35_user_PR2-41-Pooling0026_3140_13112014.bam | awk -F "。" '{print $ 2}' $ T11014
-F
オプションを使用してカスタムフィールド区切り文字を使用できます。詳細については、man awk
を参照してください。
rename 's/.*?\.([^.]+).*/$1.bam/' *.bam -vn
-vn
を削除して、目的の動作を確認できます。これが私のテストハーネスです。
$ touch 34234234kh.TESTING00{1..3}.234978623478y234.bam
$ rename 's/.*?\.([^.]+).*/$1.bam/' *.bam -vn
34234234kh.TESTING001.234978623478y234.bam renamed as TESTING001.bam
34234234kh.TESTING002.234978623478y234.bam renamed as TESTING002.bam
34234234kh.TESTING003.234978623478y234.bam renamed as TESTING003.bam
すばらしいkrename
プログラムを使用できます。
Sudo apt-get install krename
このプログラムでは、結果のプレビューがあり、特に、特定の範囲のファイル名マスクのみを使用できます。
マスクは➀にあります。 fileに元のファイル名、➂に予定される名前を参照してください。うまくいったら、finishを押してください:➃—この後、ファイルの名前が実際に変更されます。
Findコマンドを使用して、すべての*.bam
ファイルを検索し、whileループで各ファイルを1つずつ読み取り、最後にmv
コマンドでファイル名を目的の名前に変更します。
find /path/to/maindir -type f -name "*.bam" -print0 | while IFS= read -d '' -r file
do
echo mv -v "$file" /path/to/maindir/"$(awk -F'.' '{print $2".bam"}'<<< "$file")";
done
結果:
mv -v /home/USER/maindir/IonXpress_049.T11014.R_2014_11_13_11_26_35_user_PR2-41-Pooling0026_3140_13112014.bam /home/USER/maindir/T11014.bam
mv -v /home/USER/maindir/IonXpress_050.T11114.R_2014_11_13_11_26_35_user_PR2-41-Pooling0026_3140_13112014.bam /home/USER/maindir/T11114.bam
結果を確認した場合は、echo
コマンドを削除して実際の名前を変更してください。
仮定して
.bam
拡張は常に存在しますこのpythonソリューションが仕事をするはずです。セクションの数は異なる場合がありますが、それでも動作します。
#!/usr/bin/env python3
import os
import shutil
import sys
directory = sys.argv[1]
for item in os.listdir(directory):
if not item.startswith("."):
edit = item.split("."); newname = (".").join([edit[1], edit[-1]])
if len(edit) > 2:
shutil.move(directory+"/"+item, directory+"/"+newname)
それを空のファイルにコピーし、実行可能にして(python3
プレフィックスなしで実行する)、コマンドで実行します:
</path/to/script> <directory_with_files>
そのため:
monkey.banana.peanut.bam
になる
banana.bam
そして
monkey.Apple.peaunt.another_string.and_alot_more.bam
になる
Apple.bam
ながら
something.bam
放置されます。
re
モジュールによる別のpythonソリューション。
script.py
#!/usr/bin/python3
import sys
import re
import os
import shutil
directory = sys.argv[1]
for item in os.listdir(directory):
if '.' in item:
newname = re.sub(r'^[^.]+\.([^.]*).+(\.bam)', r'\1\2', item)
shutil.move(directory+"/"+item, directory+"/"+newname)
実行方法
python3 script.py /path/to/the/directory/where/the/files/you/want/to/rename/are/stored
これらの答えはすべて良いですが、プログラミングを必要としない方法を示したいと思います(すでにSublime Textがインストールされている場合ははるかに高速になります)
ctrl+shif+p
> Install Package> FileBrowser http://github.com/aziz/SublimeFileBrowser )FileBrowserキーボードショートカットを構成します(ctrl+shift+p
> Key Bindings User)。
{ "keys": ["f1"], "command": "dired", "args": { "immediate": true } }
fileBrowserを起動します(F1
)
ctrl+d
)shift+R
)ctrl+right
は単語間をジャンプします)Enter
を使用して名前変更を適用する