因此,我正在编写一个bash脚本,用于统计目录中的文件数并输出一个数字。该函数接受一个目录参数以及一个可选的文件类型扩展参数。在终端中找到工作,但在bash脚本中失败
我使用以下几行将dir
变量设置为目录,将ext
变量设置为将表示要计数的所有文件类型的正则表达式。
dir=$1
[[ $# -eq 2 ]] && ext="*.$2" || ext="*"
我遇到的问题,当我试图运行下面的行出现:
echo $(find $dir -maxdepth 1 -type f -name $ext | wc -l)
运行脚本从终端工作时,我提供了第二个文件类型的说法,但失败时,我不“T。
[email protected]:~$ bash Documents/howmany.sh Documents/ sh
3
[email protected]:~$ bash Documents/howmany.sh Documents/
find: paths must precede expression: Desktop
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
0
...我已经寻找这个错误,我知道这是与外壳扩大我通配符作为解释here的问题。我尝试过使用单引号,双引号和反斜杠来逃避星号,但似乎没有任何工作。特别有趣的是,当我尝试通过终端直接运行时,它工作得很好。
[email protected]:~$ echo $(find Documents/ -maxdepth 1 -type f -name "*" | wc -l)
6
hm,在bash脚本中为我工作的时候,当我在一个cwd中切换“Documents”时 – cianius 2014-09-22 22:27:31
您需要在find命令中引用'“$ dir”'。也许''$ ext“'也是。也有'**没有理由将'find'命令包装在'echo $(...)'中。 – 2014-09-22 22:29:29
@ jm666如果你想查找输出到一行,然后使用'-printf'来告诉它做到这一点。不要滥用shell的空白处理。但是,是的,当然有些时候可以故意使用shell的行为。 – 2014-09-22 23:13:04