Bash 如何遍历目录并仅显示文件名

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

我想迭代目录的内容,只列出普通文件。 目录的路径作为用户输入提供。如果输入是当前目录,但不与其他目录一起使用,则脚本可以工作。 我知道这可以通过ls实现。。但是我需要用一个。。在控制结构中

#!/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
    测试的名称组合起来
  • 选项2只会改变:

        if [ -f $content ];
    
    致:

    注意,这里还有其他问题
    ls
    可能会对输出进行更改,从而破坏这一点,具体取决于包装。如果您坚持使用
    ls
    ,您至少可以通过以下方式(稍微)使其更安全:

    contents="$(command ls -1F "$path")"
    

    ls
    仅返回文件名,不包括路径。您需要:

  • 将工作目录更改为有问题的路径,或
  • 将路径与
    -f
    测试的名称组合起来
  • 选项2只会改变:

        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
        命令来选择这些文件。见此帖:

        相关的