0

我需要递归地在一个目录中找到所有 TIFF,但忽略一些也恰好以“ .tif”结尾的工件(基本上所有隐藏文件)。这个命令:

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

在命令行上完全按照我想要的方式工作,但是在 bash 脚本中它找不到任何东西。我已经尝试用!and---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
4

2 回答 2

1

它与将表达式存储在变量中有关。解决方案是使用eval,这当然是正确的做法。除了 for 循环的开头之外,一切都与上面相同:

for in_img in $(eval $FIND_CMD | sort); do
    #stuff
done
于 2012-06-18T22:36:33.253 回答
0

要找不到隐藏文件,您可以使用以下命令:

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

它检查文件名并且不显示(括号中的!)以点开头的文件,这些文件是隐藏文件。

于 2012-06-18T21:43:40.107 回答