在目录中搜索文件

时间:2012-03-26 17:01:24

标签: linux csh

大家好我正在尝试编写一个脚本,该脚本以递归方式从父目录中搜索目录,并计算子目录中有多少文本文件(.txt)。我还需要输出父目录的文件相对路径。

假设我有一个名为Files

的文件夹

在此文件夹中可能有:

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变量。如果目录列表很大,那么这将获得巨大的开销。

3 个答案:

答案 0 :(得分:1)

首先

cd $argv[1],然后使用find . -iname '*.txt'生成相对于目录

的结果

答案 1 :(得分:0)

尝试

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

这应该给出所需的输出:)

海登

答案 2 :(得分:0)

此外,如果您不想执行 find 两次,您可以:

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

请注意,如果您使用bash代替进程替换,则可以复制 find 的输出并使用 tee :

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