3

Фон:

У меня есть скрипт, который принимает имя файла в качестве параметра, например, «mydb.sql». Мой сценарий импортирует эту БД и "очищает" ее (удаляет идентифицируемые пользователем данные и т.д.), Экспортирует ее и затем создает "облегченную" версию (удаляет все несущественные данные, оставляя только основного пользователя-администратора, удаляя все голоса и т.д.), Они генерируются в mydb.clean.sql и mydb.lite.sql. Этот скрипт запускается в нескольких папках.

Я хочу создать шаблон подстановки, чтобы перейти к find . Первоначально я просто жестко запрограммировал '*.sql' который возвратил оригинал, чистый и облегченный (затем они были переданы в du чтобы получить сводную информацию о размере файла).

Теперь я изменил свой скрипт, чтобы получить параметр; имя файла Это позволяет мне запустить его на одном файле.

Вопрос

Итак, как мне получить шаблон? У меня есть это:

FNAME=$(basename "$1");
FNAME="${FNAME%.*}*.sql"
echo $FNAME

Это преобразует FNAME из /home/user/backups/sitea/mydb.sql в mydb . Затем я хочу, чтобы FNAME была строкой 'mydb*.sql' , однако bash расширяет ее *, поэтому я FNAME как 'mydb.sql mydb.clean.sql mydb.lite.sql' (при условии, что она найдена в CWD).

У меня есть попытки сделать обратную косую черту * , однако в итоге я 'mydb\*.sql' который не работает. Я пытался использовать одинарные кавычки, но затем bash не раскрывает часть ${FNAME%.*} .

Какие-нибудь мысли?

Обновить

Это лучше иллюстрирует проблему ...

[user@server temp]$ T="${FNAME}\*.sql"; echo $T
mydb\*.sql

[user@server temp]$ T="${FNAME}*.sql"; echo $T
mydb.clean.sql mydb.lite.sql mydb.sql

[user@server temp]$ T='${FNAME}*.sql'; echo $T
${FNAME}*.sql

1 ответ1

4

Это расширяется на последнем шаге.

echo "$FNAME"

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