Переименовать несколько файлов с разделителями
Как я могу переименовать несколько файлов, как,
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
7 ответов
Есть несколько способов переименования из командной строки. Вот один лайнер. Перейдите в каталог, где .bam файлы находятся и попробуйте это,
for i in *.bam; do mv "$i" "$(echo $i | awk -F"." '{print $2}').bam"; done
Как это устроено:
- Использование цикла for и оболочки, перехватывающей нужные файлы,
ибо я в *.bam
делать
мв источник назначения
сделанный- Затем извлеките часть, которую вы хотите сохранить, т.е. второе поле строки, разделенное
.с помощью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
В этой программе у вас есть предварительный просмотр результата, и вы можете, в частности, использовать только определенный диапазон маски имени файла:

Маска на ➀. Смотрите исходные имена файлов в ➁ и будущие имена в ➂. Если все в порядке, вы можете нажать Готово: only - только после этого файлы будут фактически переименованы.
Используйте команду 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
Результат:
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/) Установить
- Управление возвышенными пакетами ( https://packagecontrol.io/installation)
- Установите пакет FileBrowser (
ctrl+shif+p> Установить пакет> 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