2012-03-26 145 views
1

大家好我想写一个脚本递归搜索父目录中的目录并计算子目录中有多少文本文件(.txt)。我还需要输出文件相对路径到父目录。在目录中搜索文件

可以说我有一个名为文件

在此文件夹文件夹可能有:

Files/childFolder1/child1.txt 
Files/childFolder1/child2.txt 
Files/childFolder1/child3.txt 
Files/childFolder2/child4.txt 
Files/childFolder2/child5.txt 
Files/child6.txt 

所以输出将

The files are: 

/childFolder1/child1.txt 
/childFolder1/child2.txt 
/childFolder1/child3.txt 
/childFolder2/child4.txt 
/childFolder2/child5.txt 
/child6.txt 

There are 6 files in the 'Files' folder 

到目前为止,我有一个脚本这是这个:

#! /bin/csh 

find $argv[1] -iname '*.txt' 

set wc=`find $argv[1] -iname '*.txt' | wc -l` 

echo "Number of files under" $argv[1] "is" $wc 

我不知道如何使输出,所以它只显示相对于目录的文件路径。目前我的输出是这样的:

/home/Alice/Documents/Files/childFolder1/child1.txt 
/home/Alice/Documents/Files/childFolder1/child2.txt 
/home/Alice/Documents/Files/childFolder1/child3.txt 
/home/Alice/Documents/Files/childFolder2/child4.txt 
/home/Alice/Documents/Files/childFolder2/child5.txt 
/home/Alice/Documents/Files/child6.txt 
Number of files under /home/Alice/Documents/Files is 6 

这是不希望的。我也担心我如何设置$wc变量。如果目录列表很大,那么这将会产生巨大的开销。

回答

0

尝试

find $argv[1] -iname '*.txt' -printf "%P \n" 

这应该得到所需要的输出:)

海登

1

cd $argv[1],然后再使用find . -iname '*.txt'使相对目录结果

0

而且,如果你不想执行找到两次,你可以:

  • 将其输出存储在一个变量,但我不知道变量是否在csh中的大小是有限的;
  • 将其输出存储在临时文件中,但纯粹主义者不喜欢临时文件;
  • 计算自己的行数while循环遍历find的结果。

需要注意的是,如果你使用bash的替代,它支持进程替换你可以复制找到的输出和管道它的多个命令与三通

find [...] | tee >(cmd1) >(cmd2) >/dev/null