【问题标题】:How to show only file name when searching subdirectories in bash在bash中搜索子目录时如何仅显示文件名
【发布时间】:2014-10-23 19:45:51
【问题描述】:

我正在尝试仅在 bash 中的文件夹的子目录中列出所有文件(隐藏文件除外):

$ find ./public -mindepth 3 -type f -not -path '*/\.*'

返回:

./public/mobile/images/image1.jpg
./public/mobile/images/image2.png
./public/mobile/images/image3.jpg
./public/mobile/javascripts/java1.js
./public/mobile/javascripts/java2.js
./public/mobile/javascripts/java3.js
./public/mobile/stylesheets/main.css
./public/mobile/views/doc1.html
./public/mobile/views/doc2.html
./public/mobile/views/doc3.html

如何忽略文件路径,只显示带有扩展名的文件名?

谢谢你:)

【问题讨论】:

标签: bash unix find filenames subdirectory


【解决方案1】:

find 命令之外使用-printf,而不是-print

find ./public -mindepth 3 -type f -not -path '*/\.*' -printf %f\\n

注意\\n 的用法 - 您需要\n 在文件名后添加一个新行,但添加另一个\ 作为转义或添加一些引号以防止shell 解释\n

【讨论】:

    【解决方案2】:

    如果您使用的是bash 4 或更高版本,则可以跳过使用find 并改用文件模式。

    shopt -s globstar    # For **
    printf "%s\n" public/*/*/**/*.*
    

    如果您希望某些文件没有扩展名,则需要使用循环并过滤掉 手动匹配非文件。

    for f in */*/*/**/*; do
        [[ -f $f ]] || continue
        printf "%s\n" "${f##*/}"
    done
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-23
      • 2011-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多