在bash中列出特定模式的文件
在这种情况下,我必须列出类型为 数据库名。schemaName@1234sdf2323.lock其中(数据库)名称和(目标)模式(模式)名称 _lockFolder是变量 @是一个标记,其后是随机字母数字,结尾是.lock 我已经通过以下代码在批处理文件中实现了这一点在bash中列出特定模式的文件,bash,shell,cmd,Bash,Shell,Cmd,在这种情况下,我必须列出类型为 数据库名。schemaName@1234sdf2323.lock其中(数据库)名称和(目标)模式(模式)名称 _lockFolder是变量 @是一个标记,其后是随机字母数字,结尾是.lock 我已经通过以下代码在批处理文件中实现了这一点 FOR /R %_lockFolder% %%F in (%_Database_Name%.%_target_schema_name%@*.lock) do ( for /f "tokens=1* delims=@ "
FOR /R %_lockFolder% %%F in (%_Database_Name%.%_target_schema_name%@*.lock) do (
for /f "tokens=1* delims=@ " %%G IN ("%%~nF") DO (
SET _no=%%H
)
)
但是当我把它改成bash environment以便它可以在unix environment上运行时
for entry in "${_lockFolder}"/*
do
echo ENTRY "$entry"
name='${_lockFolder}/${_Database_Name}.${_target_schema_name}@*.lock'
ls -l $name > "${lockFolder}"
if [ "$?" -eq "0" ]
then
echo "Do your work here"
else
echo "No files are there for the given pattern"
fi
# exit 21
done
它无法识别模式。这些文件存在于我指定的文件夹中您可以简单地编写一个for循环
for file in `find ${lockdir} -name "^${_lockFolder}/${_Database_Name}.${_target_schema_name}@*.lock$"`
do
echo $file
:
:
your job
done
例如
[root@giam20 unix]# ls
checksumupdator.sh GIAMMEFProcessor.sh GIAMRoleExtractor.sh
GIAMAccountExtractor.sh GIAMMetaDataLoader.sh GIAMRoleLoader.sh
GIAMAccountLoader.sh GIAMOOPControlledAttrExtractor.sh GIAMRoleMappingLoader.sh
GIAMAccountTransferLoader.sh GIAMOOPControlledAttrsLoader.sh
[root@giam20 unix]# find . -name "GIAM*.sh"
./GIAMAccountTransferLoader.sh
./GIAMIntermediateCodeUpgrader.sh
./GIAMServiceUpdator.sh
./GIAMOOPControlledAttrsUpdator.sh
./GIAMRoleUpdator.sh
./GIAMProvisioningPolicyExtractor.sh
./GIAMCompExemptionExtractor.sh
./GIAMApprovalNotificationLoader.sh
在unixshell脚本中,变量引用不会解析为包含在单引号中的字符串。因此,在这方面,
name='${_lockFolder}/${_Database_Name}.${_target_schema_name}@*.lock'
该值将按字面形式存储到name中,包括所有${name}引用。因此,这种模式后来不匹配也就不足为奇了
因此,只需将单引号更改为双引号:
name="${_lockFolder}/${_Database_Name}.${_target_schema_name}@*.lock"
新代码的用途似乎与原始代码相冲突。您不应该在${u Database\u Name}.${u target\u schema\u Name}中填充.lock文件吗?不,目的与${u Database\u Name}.${u target\u schema\u Name}@some\u random\u number.lock文件相同,可在${lockFolder}中找到但是,正如您的回答所述,更改后同样不起作用。您是否尝试在循环中回显$name,以便查看它得到的值?