我有一种情况,我必须列出类型为
的文件databaseName.schemaName@1234sdf2323.lock 其中_Database_Name和_target_schema_name _lockFolder是变量
@是一个标记,然后是随机的字母数字编号,同样以.lock结尾。
我已经通过代码
在批处理文件中实现了这一点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环境以便它可以在unix环境中运行时
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
无法识别图案。这些文件存在于我指定的文件夹中
答案 0 :(得分:0)
你可以简单地写一个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
答案 1 :(得分:0)
在Unix shell脚本中,变量引用不会在用单引号括起来的字符串中解析。因此,在这一行
name='${_lockFolder}/${_Database_Name}.${_target_schema_name}@*.lock'
该值将逐字存储到name
,包括所有${name}
引用。因此,模式在以后不匹配也就不足为奇了。
因此,只需将单引号更改为双引号:
name="${_lockFolder}/${_Database_Name}.${_target_schema_name}@*.lock"