Bash 如何遍历目录并仅显示文件名
我想迭代目录的内容,只列出普通文件。 目录的路径作为用户输入提供。如果输入是当前目录,但不与其他目录一起使用,则脚本可以工作。 我知道这可以通过ls实现。。但是我需要用一个。。在控制结构中Bash 如何遍历目录并仅显示文件名,bash,Bash,我想迭代目录的内容,只列出普通文件。 目录的路径作为用户输入提供。如果输入是当前目录,但不与其他目录一起使用,则脚本可以工作。 我知道这可以通过ls实现。。但是我需要用一个。。在控制结构中 #!/bin/bash echo "Enter the path:" read path contents=$(ls $path) for content in $contents do if [ -f $content ]; then echo $content fi
#!/bin/bash
echo "Enter the path:"
read path
contents=$(ls $path)
for content in $contents
do
if [ -f $content ];
then
echo $content
fi
done
ls
仅返回文件名,不包括路径。您需要:
-f
测试的名称组合起来 if [ -f $content ];
致:
注意,这里还有其他问题ls
可能会对输出进行更改,从而破坏这一点,具体取决于包装。如果您坚持使用ls
,您至少可以通过以下方式(稍微)使其更安全:
contents="$(command ls -1F "$path")"
ls
仅返回文件名,不包括路径。您需要:
-f
测试的名称组合起来 if [ -f $content ];
致:
注意,这里还有其他问题ls
可能会对输出进行更改,从而破坏这一点,具体取决于包装。如果您坚持使用ls
,您至少可以通过以下方式(稍微)使其更安全:
contents="$(command ls -1F "$path")"
您有两种方法可以正确执行此操作: 通过*模式和测试文件类型进行循环:
#/usr/bin/env bash
echo“输入路径:”
read-r路径
对于“$path/”中的文件*;做
如果[-f“$file”];然后
回显“$file”
fi
完成
或者使用“查找”迭代以空分隔的文件名列表:
#/usr/bin/env bash
echo“输入路径:”
read-r路径
而IFS=read-r-d“”文件;做
回显“$file”
完成<您有两种方法来正确完成此操作:
通过*模式和测试文件类型进行循环:
#/usr/bin/env bash
echo“输入路径:”
read-r路径
对于“$path/”中的文件*;做
如果[-f“$file”];然后
回显“$file”
fi
完成
或者使用“查找”迭代以空分隔的文件名列表:
#/usr/bin/env bash
echo“输入路径:”
read-r路径
而IFS=read-r-d“”文件;做
回显“$file”
完成<使用文件
,设置为从$path目录中搜索文件(-type f
):
find "$path" -type f
使用文件
,设置为从$path目录中搜索文件(-type f
):
find "$path" -type f
以下是你可以写的:
#!/usr/bin/env bash
path=
while [[ ! $path ]]; do
read -p "Enter path: " path
done
for file in "$path"/*; do
[[ -f $file ]] && printf '%s\n' "$file"
done
如果要递归遍历所有子目录以查找文件,可以使用:
如果您正在根据一个或多个模式或某些其他条件查找特定文件,可以使用find
命令来选择这些文件。见此帖:
相关的
以下是您可以写的内容:
#!/usr/bin/env bash
path=
while [[ ! $path ]]; do
read -p "Enter path: " path
done
for file in "$path"/*; do
[[ -f $file ]] && printf '%s\n' "$file"
done
如果要递归遍历所有子目录以查找文件,可以使用:
如果您正在根据一个或多个模式或某些其他条件查找特定文件,可以使用find
命令来选择这些文件。见此帖:
相关的