在bash中列出特定模式的文件

时间:2014-07-14 05:43:36

标签: bash shell cmd

我有一种情况,我必须列出类型为

的文件

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 

无法识别图案。这些文件存在于我指定的文件夹中

2 个答案:

答案 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"