【问题标题】:How do I iterate through a directory in bash如何遍历bash中的目录
【发布时间】:2015-02-22 22:53:53
【问题描述】:

我需要编写一个脚本来遍历用户输入的目录,然后我需要它来查找目录中的每个项目是链接、文件还是目录。我对 bash 很陌生,我无法弄清楚。

【问题讨论】:

  • for i in *;回声 $i;完成

标签: bash shell scripting


【解决方案1】:

您可以像这样遍历目录中的条目:

#!/bin/sh

for f in *; do
  [ -f "$f" ] && echo "$f is a regular file."
  [ -d "$f" ] && echo "$f is a directory."
  [ -h "$f" ] && echo "$f is a symbolic link."
done

请参阅man test 了解更多可用测试。

但要列出它们,我可能会使用 find 实用程序:

find directory -maxdepth 1 -printf '%y %p\n'

或递归:

find directory -printf '%y %p\n'

【讨论】:

    【解决方案2】:

    您也需要目录或子目录吗?这是作业吗?

    您可以使用for 循环访问一组项目,包括目录中的项目:

    for file in "$directory/"*
    do
         echo "File is '$file'"
    done
    

    现在,您可以使用stat 来获取文件类型。您需要执行man stat 并阅读文档,因为此命令因计算机而异。

    例如,我会使用stat -f%HT $file 来报告这是Regular FileDirectory 还是Link

    这应该为您提供足够的信息来帮助您继续前进。如果您刚开始编写 Bash 脚本,我强烈建议您阅读一本关于 Bash 编程的好书。结帐Classic Shell Scripting 阿诺德罗宾斯。

    它假定您对 Bash shell 有一定的了解。如果您真的不熟悉 Bash shell,请查看 Learning the Bash Shell。这是对 Bash 的简要介绍,包括一些基本的编程技术。

    【讨论】:

      【解决方案3】:

      如果你想遍历给定目录,你可以使用

      read -p "Enter folder name " dir
      

      然后在@Wintermute 回答时迭代目录

      for f in $dir/*; do
      ...
      done
      

      【讨论】:

        猜你喜欢
        • 2011-08-05
        • 2014-10-02
        • 1970-01-01
        • 2011-05-11
        • 1970-01-01
        • 2019-09-30
        • 2012-07-25
        • 2021-01-16
        • 1970-01-01
        相关资源
        最近更新 更多