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