Переименовать несколько файлов с разделителями
Как я могу переименовать несколько файлов, как,
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