如何遍历 bash 中的目录

How do I iterate through a directory in bash

我需要编写一个脚本来遍历用户输入的目录,然后我需要它来查找目录中的每个项目是 link、文件还是目录。我是 bash 的新手,我搞不懂。

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

#!/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'

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

read -p "Enter folder name " dir

然后按照@Wintermute 的回答迭代目录

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

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

您可以使用 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 的简要介绍,包括一些基本的编程技术。