1

Я пробовал каждую комбинацию с обратным слешем, звездочкой и фигурными скобками, похоже, ничего не работает. Я использую терминал в OS X, и я был бы очень признателен, если бы кто-то мог направить меня прямо.

2 ответа2

1

Я бы использовал 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 чтобы просто просмотреть изменения, не применяя их, если вы хотите проверить команды заранее.

0

Вы можете использовать $() для того, чтобы задача 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .