如何遍历 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 File
、Directory
还是 Link
。
这应该能为您提供足够的信息,让您继续前进。如果您刚刚开始编写 Bash 脚本,我强烈建议您在 Bash 中获得一本关于编程的好书。结帐 Classic Shell Scripting 阿诺德罗宾斯。
它假定您对 Bash shell 有一些了解。如果你真的不熟悉 Bash shell,请看一看 Learning the Bash Shell。这是对 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 File
、Directory
还是 Link
。
这应该能为您提供足够的信息,让您继续前进。如果您刚刚开始编写 Bash 脚本,我强烈建议您在 Bash 中获得一本关于编程的好书。结帐 Classic Shell Scripting 阿诺德罗宾斯。
它假定您对 Bash shell 有一些了解。如果你真的不熟悉 Bash shell,请看一看 Learning the Bash Shell。这是对 Bash 的简要介绍,包括一些基本的编程技术。