Фон:
У меня есть скрипт, который принимает имя файла в качестве параметра, например, «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
