Профили для терминала GNOME хранятся в системе конфигурации GConf. Чтобы изменить их напрямую, нажмите Alt + F2, чтобы отобразить поле «Запустить команду», введите gconf-editor, а затем перейдите к /apps/gnome-terminal/profiles.
Снимите флажок /apps/gnome-terminal/profiles/Default/use_custom_command, чтобы решить вашу проблему.
Альтернативный способ выхода из этой ситуации - переопределить пользовательскую команду, указав другое в качестве аргумента командной строки, например gnome-terminal -x bash, еще раз в поле «Запустить команду».
Этот скрипт должен помочь:
#!/bin/bash
for i in ./BBC_english/*; do
# Get the path to the file
path=$(dirname "$(readlink -f "$i")")
# get the names for file rename
f2=$( echo "$path" | grep -Eo "\-[0-9]{2}-[0-9]{2}" | grep -Eo "[0-9]{2}-[0-9]{2}")
f1=$( echo "$path" | grep -Eo BBC_english )
f3=$(echo "$path" | grep -Eo "\.[0-9]{2}\.[0-9]{2}" | grep -Eo "[0-9]{2}\.[0-9]{2}")
# Rename the files
mv -n "$i" ./newpath/"$f1"__"$f2"__"$f3".mpeg
done
Поскольку вы упомянули, что у вас есть Fedora, вот вам скрипт Python, который использует синтаксис Python 2, который должен работать без каких-либо проблем или различий как на Ubuntu, так и на Fedora. (Было бы неплохо использовать prename, какие деривативы Debian по умолчанию, но, к сожалению, Fedora этого не делает. Я оставлю это как упражнение для будущего, а prename по-прежнему полезно для пользователей Ubuntu.)
Вот сам скрипт:
#!/usr/bin/env python
import os
import sys
import shutil
def find_files(start_dir):
ext_paths = []
for root,dirs,files in os.walk(start_dir):
if root == start_dir: continue
ext_paths = ext_paths + map( lambda x: os.path.join(root,x),files )
return ext_paths
def alter_path(path,new_dir):
newpath = path.replace(".3-0.rec/00001","").replace("2017-","")
newpath = newpath.replace("BBC_english/","BBC_english__").replace("19.","19__")
return os.path.join(new_dir,newpath)
def main():
for i in find_files(sys.argv[1]):
print(i,alter_path(i,sys.argv[2]))
shutil.copy(i,alter_path(i,sys.argv[2]))
if __name__ == '__main__':
main()
Здесь он находится в действии:
$ ./rename_mpegs.py BBC_english/ newpath/
('BBC_english/2017-09-19.23.00.3-0.rec/00001.mpeg', 'newpath/BBC_english__09-19__23.00.mpeg')
('BBC_english/2017-09-19.20.00.3-0.rec/00001.mpeg', 'newpath/BBC_english__09-19__20.00.mpeg')
('BBC_english/2017-09-19.22.00.3-0.rec/00001.mpeg', 'newpath/BBC_english__09-19__22.00.mpeg')
('BBC_english/2017-09-19.21.00.3-0.rec/00001.mpeg', 'newpath/BBC_english__09-19__21.00.mpeg')
$ tree newpath/
newpath/
├── BBC_english__09-19__20.00.mpeg
├── BBC_english__09-19__21.00.mpeg
├── BBC_english__09-19__22.00.mpeg
└── BBC_english__09-19__23.00.mpeg
Я предлагаю вам заменить часть shutil.copy() на shutil.move() или вы можете просто избавиться от старого каталога в конце, но я оставлю это вам решать.
Правила просты: вызовите сценарий с источником как аргумент 1 и пункт назначения в качестве аргумента 2 в сценарий из каталога на один уровень выше BBC_english. В целом, сценарий быстрый и грязный, переименование жестко закодировано; можно сказать, что он не идеален, но он работает.
Как предполагает heemayl в ответ на связанный пост, вы можете использовать серию расширений оболочки.
Предполагая, что текущий рабочий каталог является родителем как источника, так и адресата, вы можете использовать этот цикл в системе Ubuntu:
$ for d in ./BBC_english/*; do e="${d##*2017-}"; f="${e%%.[0-9]-[0-9].rec}"; g="${f/./__}"; echo mv -v -- "$d"/* ./newpath/BBC_english__"$g".mpeg; done
mv -v -- ./BBC_english/2017-09-19.20.00.3-0.rec/00001.mpeg ./newpath/BBC_english__09-19__20.00.mpeg
mv -v -- ./BBC_english/2017-09-19.21.00.3-0.rec/00001.mpeg ./newpath/BBC_english__09-19__21.00.mpeg
mv -v -- ./BBC_english/2017-09-19.22.00.3-0.rec/00001.mpeg ./newpath/BBC_english__09-19__22.00.mpeg
mv -v -- ./BBC_english/2017-09-19.23.00.3-0.rec/00001.mpeg ./newpath/BBC_english__09-19__23.00.mpeg
Обратите внимание, что мы перебираем каталоги, а не файлы. Это предполагает, что у вас действительно есть только один файл в каждом каталоге, который, по-видимому, соответствует логике.
Удалите echo после тестирования, чтобы фактически переместить файлы. Затем -v вызывает mv, чтобы сообщить, что он делает.
Если ваш mv не поддерживает флаг -v (verbose), и вы хотите видеть, что происходит, вы можете вместо этого получить bash, чтобы быть подробным, и дать вам подробное резюме того, что он делает, используя set -x
#!/bin/bash
set -x
for d in ./BBC_english/*; do
e="${d##*2017-}" # remove everything before and including 2017-
f="${e%%.[0-9]-[0-9].rec}" # remove the trailing numbers and `.rec`
g="${f/./__}" # replace the first `.` with `__`
echo mv -- "$d"/* ./newpath/BBC_english__"$g".mpeg
# move to the new path using the edited directory name
done
Результат этого после удаления echo будет включать результат каждого расширения и оператора mv для каждой итерации цикла. Для первой итерации вывод будет выглядеть так:
+ for d in ./BBC_english/*
+ e=09-19.20.00.3-0.rec
+ f=09-19.20.00
+ g=09-19__20.00
+ mv -- ./BBC_english/2017-09-19.20.00.3-0.rec/00001.mpeg ./newpath/BBC_english__09-19__20.00.mpeg
Этот скрипт должен помочь:
#!/bin/bash
for i in ./BBC_english/*; do
# Get the path to the file
path=$(dirname "$(readlink -f "$i")")
# get the names for file rename
f2=$( echo "$path" | grep -Eo "\-[0-9]{2}-[0-9]{2}" | grep -Eo "[0-9]{2}-[0-9]{2}")
f1=$( echo "$path" | grep -Eo BBC_english )
f3=$(echo "$path" | grep -Eo "\.[0-9]{2}\.[0-9]{2}" | grep -Eo "[0-9]{2}\.[0-9]{2}")
# Rename the files
mv -n "$i" ./newpath/"$f1"__"$f2"__"$f3".mpeg
done
Поскольку вы упомянули, что у вас есть Fedora, вот вам скрипт Python, который использует синтаксис Python 2, который должен работать без каких-либо проблем или различий как на Ubuntu, так и на Fedora. (Было бы неплохо использовать prename, какие деривативы Debian по умолчанию, но, к сожалению, Fedora этого не делает. Я оставлю это как упражнение для будущего, а prename по-прежнему полезно для пользователей Ubuntu.)
Вот сам скрипт:
#!/usr/bin/env python
import os
import sys
import shutil
def find_files(start_dir):
ext_paths = []
for root,dirs,files in os.walk(start_dir):
if root == start_dir: continue
ext_paths = ext_paths + map( lambda x: os.path.join(root,x),files )
return ext_paths
def alter_path(path,new_dir):
newpath = path.replace(".3-0.rec/00001","").replace("2017-","")
newpath = newpath.replace("BBC_english/","BBC_english__").replace("19.","19__")
return os.path.join(new_dir,newpath)
def main():
for i in find_files(sys.argv[1]):
print(i,alter_path(i,sys.argv[2]))
shutil.copy(i,alter_path(i,sys.argv[2]))
if __name__ == '__main__':
main()
Здесь он находится в действии:
$ ./rename_mpegs.py BBC_english/ newpath/
('BBC_english/2017-09-19.23.00.3-0.rec/00001.mpeg', 'newpath/BBC_english__09-19__23.00.mpeg')
('BBC_english/2017-09-19.20.00.3-0.rec/00001.mpeg', 'newpath/BBC_english__09-19__20.00.mpeg')
('BBC_english/2017-09-19.22.00.3-0.rec/00001.mpeg', 'newpath/BBC_english__09-19__22.00.mpeg')
('BBC_english/2017-09-19.21.00.3-0.rec/00001.mpeg', 'newpath/BBC_english__09-19__21.00.mpeg')
$ tree newpath/
newpath/
├── BBC_english__09-19__20.00.mpeg
├── BBC_english__09-19__21.00.mpeg
├── BBC_english__09-19__22.00.mpeg
└── BBC_english__09-19__23.00.mpeg
Я предлагаю вам заменить часть shutil.copy() на shutil.move() или вы можете просто избавиться от старого каталога в конце, но я оставлю это вам решать.
Правила просты: вызовите сценарий с источником как аргумент 1 и пункт назначения в качестве аргумента 2 в сценарий из каталога на один уровень выше BBC_english. В целом, сценарий быстрый и грязный, переименование жестко закодировано; можно сказать, что он не идеален, но он работает.
Как предполагает heemayl в ответ на связанный пост, вы можете использовать серию расширений оболочки.
Предполагая, что текущий рабочий каталог является родителем как источника, так и адресата, вы можете использовать этот цикл в системе Ubuntu:
$ for d in ./BBC_english/*; do e="${d##*2017-}"; f="${e%%.[0-9]-[0-9].rec}"; g="${f/./__}"; echo mv -v -- "$d"/* ./newpath/BBC_english__"$g".mpeg; done
mv -v -- ./BBC_english/2017-09-19.20.00.3-0.rec/00001.mpeg ./newpath/BBC_english__09-19__20.00.mpeg
mv -v -- ./BBC_english/2017-09-19.21.00.3-0.rec/00001.mpeg ./newpath/BBC_english__09-19__21.00.mpeg
mv -v -- ./BBC_english/2017-09-19.22.00.3-0.rec/00001.mpeg ./newpath/BBC_english__09-19__22.00.mpeg
mv -v -- ./BBC_english/2017-09-19.23.00.3-0.rec/00001.mpeg ./newpath/BBC_english__09-19__23.00.mpeg
Обратите внимание, что мы перебираем каталоги, а не файлы. Это предполагает, что у вас действительно есть только один файл в каждом каталоге, который, по-видимому, соответствует логике.
Удалите echo после тестирования, чтобы фактически переместить файлы. Затем -v вызывает mv, чтобы сообщить, что он делает.
Если ваш mv не поддерживает флаг -v (verbose), и вы хотите видеть, что происходит, вы можете вместо этого получить bash, чтобы быть подробным, и дать вам подробное резюме того, что он делает, используя set -x
#!/bin/bash
set -x
for d in ./BBC_english/*; do
e="${d##*2017-}" # remove everything before and including 2017-
f="${e%%.[0-9]-[0-9].rec}" # remove the trailing numbers and `.rec`
g="${f/./__}" # replace the first `.` with `__`
echo mv -- "$d"/* ./newpath/BBC_english__"$g".mpeg
# move to the new path using the edited directory name
done
Результат этого после удаления echo будет включать результат каждого расширения и оператора mv для каждой итерации цикла. Для первой итерации вывод будет выглядеть так:
+ for d in ./BBC_english/*
+ e=09-19.20.00.3-0.rec
+ f=09-19.20.00
+ g=09-19__20.00
+ mv -- ./BBC_english/2017-09-19.20.00.3-0.rec/00001.mpeg ./newpath/BBC_english__09-19__20.00.mpeg