2012-06-18 35 views
0

我需要递归查找目录中的所有TIFF,但忽略也会碰巧以“.tif”结尾的一些工件(基本上所有隐藏文件)。这个命令:bash`find`转义

find . -type f -name '*.tif' ! -name '.*' 

工作正如我想要它在命令行上,但在一个bash脚本里面找不到任何东西。我已经尝试用-and -not替换!,我想 - 几乎每个我能想到的和/或由googleshpere推荐的转义排列,例如, .\*,遗漏单引号等等。显然我错过了一些东西,任何帮助表示赞赏。

编辑:这是脚本的重要部分;它所做的查找目录是参数化的,但我一直在用它进行调试。它没有什么区别:

#!/bin/bash 
RECURSIVE=1 
DIR=$1 

#get the absolute path to $DIR 
DIR=$(cd $DIR; pwd) 

FIND_CMD="find $DIR -type f -name '*.tif' ! -name '.*'" 
if [ $RECURSIVE == 1 ]; then 
    FIND_CMD="$FIND_CMD -maxdepth 1" 
fi 

for in_img in $($FIND_CMD | sort); do 
    echo $in_img # for debugging 
    #stuff 
done 
+1

请提供您的脚本 – pb2q

+0

你打电话从包含'.tiff'文件的目录的脚本摘录? –

+1

脚本的工作目录是什么?这就是'find'命令正在寻找匹配'* .tif'的文件的地方。 – chepner

回答

1

它与存储在变量中的表达式有关。解决方案是使用eval,这当然是正确的做法。一切都是一样的,所不同的for循环的开始:

for in_img in $(eval $FIND_CMD | sort); do 
    #stuff 
done 
+0

我强烈建议不要这样使用'eval',因为它可能会导致一些[真正奇怪的错误](http://stackoverflow.com/questions/9308606/usr-bin-find-cannot-build-its-arguments -dynamically/9322047#9322047)。您最好将该命令存储在该链接中描述的数组中(或根本不存储它)。另请参阅[BashFAQ#050](http://mywiki.wooledge.org/BashFAQ/050)。 –

0

要找不到你可以使用下面的隐藏文件:(!括号)

find . \(! -regex '.*/\..*' \) -type f -name "*.tif" 

它检查的文件名,不显示开始用文件点,这是隐藏的文件。

+0

同样的问题,但感谢替代方案。我认为这与我构建表达式并将其存储在一个变量中有关。 – JStroop