Я пробовал каждую комбинацию с обратным слешем, звездочкой и фигурными скобками, похоже, ничего не работает. Я использую терминал в OS X, и я был бы очень признателен, если бы кто-то мог направить меня прямо.
2 ответа
Я бы использовал prename
Perl с предварительным именем, который поставляется с большинством установок Perl (связан с rename
например, в дистрибутивах на основе Debian, но, например, в Fedora присутствует другое rename
, поэтому сначала изучите случай, если вы не уверены, или просто используйте prename
как показано ниже):
prename 's/"/'\''/g' \"A\"\ Train.flac
Правильный инструмент для правильной работы.
Чтобы получить литерал '
, я сначала останавливаю текущую среду цитирования, затем экранирую '
, затем снова запускаю среду цитирования.
Я предполагаю, что вы действительно не хотите лишать расширения имени файла, и вопрос просто сформулирован неоднозначно, но если вы это сделаете:
prename 's/"/'\''/g; s/\..*$//' \"A\"\ Train.flac
или же
prename 's/"/'\''/g; s/\.flac$//' \"A\"\ Train.flac
Используйте ключ -n
чтобы просто просмотреть изменения, не применяя их, если вы хотите проверить команды заранее.
Вы можете использовать $()
для того, чтобы задача tr
сделала это преобразование, а затем удалите расширение файла на втором шаге. Это будет выглядеть примерно так:
# Say FNAME is the variable that stores your original file name
# Convert the double quotes to single quotes:
SQFNAME=$(echo $FNAME|tr '""' "''")
# or, as an alternative in pure Bash (mind the shell character escaping):
SQFNAME=echo ${FNAME//\"/\'}
# then simply strip the extension
NEWFNAME=${SQFNAME%.flac}
# or, if you wanted to remove the extension delimited by the _last_ dot
NEWFNAME=${SQFNAME%.*}
# or, if you wanted to remove the extension delimited by the _first_ dot
NEWFNAME=${SQFNAME%%.*}
"Новое" преобразованное имя файла теперь будет в переменной NEWFNAME
.
Подтверждение концепции:
#!/usr/bin/env bash
FNAME="\"A\" Train.flac"
echo "Unchanged name: $FNAME"
SQFNAME=${FNAME//\"/\'}
echo "Converted quotes: $SQFNAME"
NEWFNAME=${SQFNAME%.flac}
echo "New file name: $NEWFNAME"
Исполнение дает:
$ bash test.sh
Unchanged name: "A" Train.flac
Converted quotes: 'A' Train.flac
New file name: 'A' Train