代码之家  ›  专栏  ›  技术社区  ›  randeepsp

目录的递归列表

  •  2
  • randeepsp  · 技术社区  · 15 年前

    下面的代码必须对所有文件和目录进行递归列表。 我不确定它是否工作正常。

    #!/usr/bin/sh
    recur_fun()
    {
        for i in `ls -ltr | awk '{print $9}'` 
        do
            echo $i;
            cd $i;
            ls
            pwd
            recur_fun
            cd ..
            pwd
        done
    } 
    

    循环娱乐

    我需要复制文件名,然后在ClearCase中使用它。

    4 回复  |  直到 14 年前
        1
  •  5
  •   Slartibartfast    15 年前

    我建议将此替换为:

    find . -print

        2
  •  2
  •   too much php    15 年前

    ls 已经有一个递归选项:

    ls -R
    
        3
  •  2
  •   Community Mohan Dere    8 年前

    注意:我建议使用cleartool命令,而不是操作系统特定的shell命令。

    例如:

    cleartool ls -r -nxn
    

    list all files 递归、私有或非私有。
    Command line to delete all ClearCase view-private files 更多。

        4
  •  1
  •   Jonathan Leffler    15 年前

    如果目的是完成工作,则使用预构建的工具,如' find “或” ls -R “可靠地完成工作。

    假设目的是学习递归和shell脚本,而不是完成任务,那么由于以下几个原因,它不能正常工作:

    1. 它不会处理包含空格的名称。
    2. 当某物不是目录时, cd 最多会产生一条错误消息。
    3. 最坏的情况是,如果设置了cdpath,并且可以在cdpath上找到该名称,那么脚本就会失控。
    4. 因为你不检查 光盘 工作时,您很容易看到相同的文件一遍又一遍地列出(在给定的目录中,每个文件一次)。

    另外,这两个分号是多余的。

    如果你确实需要使用 光盘 在脚本中,最好在子shell中这样做:

    if [ -d $i ]
    then ( cd $; pwd; recur_fun )
    fi
    

    当子shell完成时,您知道父级仍然在它以前所在的位置上—它不依赖于 光盘 命令跨符号链接执行。现代贝壳(意思是 bash )似乎认为你应该在正常情况下 光盘 “操作,这让我非常恼火,因为我几乎不想这样做。