我的目标是编写一个脚本,以递归方式搜索当前工作目录和子目录,并打印出普通文件数,目录数,块特殊文件数,特殊字符数文件,FIFO的数量和符号链接的数量。我必须使用[[]]进行条件测试。问题是我不太确定如何开始。
我尝试了类似下面的内容来搜索所有普通文件,但我不确定递归在BASH脚本中是如何工作的:
function searchFiles(){
if [[ -f /* ]]; then
return 1
fi
}
searchFiles
echo "Number of ordinary files $?"
但结果是0。有人帮忙吗?
答案 0 :(得分:40)
为什么不使用find
?
$ # Files
$ find . -type f | wc -l
327
$ # Directories
$ find . -type d | wc -l
64
$ # Block special
$ find . -type b | wc -l
0
$ # Character special
$ find . -type c | wc -l
0
$ # named pipe
$ find . -type p | wc -l
0
$ # symlink
$ find . -type l | wc -l
0
答案 1 :(得分:3)
让你入门的东西:
#!/bin/bash
directory=0
file=0
total=0
for a in *
do
if test -d $a; then
directory=$(($directory+1))
else
file=$(($file+1))
fi
total=$(($total+1))
echo $a
done
echo Total directories: $directory
echo Total files: $file
echo Total: $total
这里没有递归,因为你可以诉诸ls -lR
或类似的;但是如果你要使用外部程序,你应该再次使用find
,这就是它的目的。