Как я мог переименовать несколько файлов как,
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
как, $ 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
В этой программе Вы имеете предварительный просмотр из результата и можете, в частности, использовать просто определенный диапазон маски имени файла:
маска в вћЂ. Посмотрите исходные имена файлов в вћЃ и будущие имена в вћ. Если это кажется прекрасным, можно нажать конец: вћѓ — только после этого файлы будет на самом деле переименован.
Используйте находят команду к нахождению всего *.bam
, файлы и циклом с условием продолжения читают каждого файлы один за другим и наконец с 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
оставлен в покое.
Другое решение для Python через re
модуль.
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
В то время как все эти ответы хороши, я хочу показать Вам метод, который не включает программирование (и может быть намного быстрее, когда у Вас уже есть Сублимированный установленный текст)
ctrl+shif+p
> Пакет Установки> FileBrowser http://github.com/aziz/SublimeFileBrowser) Настраивают сочетание клавиш FileBrowser (ctrl+shift+p
> Пользователь Привязок клавиш), например,
{
"keys": ["f1"],
"command": "dired",
"args": { "immediate": true }
}
запускаются, FileBrowser (F1
)
ctrl+d
) shift+R
) ctrl+right
для перехода между словами) Enter