背景:
我有一个脚本,它以文件名作为参数,例如“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
它正在进行最后一步扩展。
echo "$FNAME"