Включите команду в /etc/rc.local.
Примечание: вы должны поставить команду перед последней строкой в /etc/rc.local, которая содержит: «exit 0».
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
В этой программе есть предварительный просмотр результата и, в частности, можно использовать только определенный диапазон маски имени файла:
Маска находится в ➀. См. Исходные имена файлов в именах ➁ и to-be в ➂. Если это кажется прекрасным, вы можете нажать на конец: ➃ - только после этого файлы будут фактически переименованы.
Используйте команду find для поиска всех файлов *.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
Результат: [ ! d1]
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
Хотя все эти ответы хороши, я хочу показать вам метод, который не связан с программированием (и может быть намного быстрее, если у вас уже установлен Sublime Text)
Установить Sublime Text (http: // www.sublimetext.com/) Установите Sublime Package Control (https://packagecontrol.io/installation). Установите пакет FileBrowser (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