【问题标题】:Searching a directory for files在目录中搜索文件
【发布时间】:2012-03-26 17:01:23
【问题描述】:

大家好,我正在尝试编写一个脚本,该脚本从父目录递归搜索目录并计算子目录中有多少文本文件 (.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 变量。如果目录列表很大,那么这将获得巨大的开销。

【问题讨论】:

    标签: linux csh


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      试试

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

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

      海顿

      【讨论】:

        【解决方案3】:

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

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

        请注意,如果您改用支持 进程替换 的 bash,您可以复制 find 的输出并使用 tee将其传递给多个命令>:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-04-26
          • 2015-06-07
          • 1970-01-01
          • 2010-09-05
          • 1970-01-01
          • 2011-01-12
          • 2011-04-23
          • 2012-08-03
          相关资源
          最近更新 更多