在bash中搜索子目录时如何只显示文件名

时间:2014-10-23 19:45:52

标签: bash unix find filenames subdirectory

我试图通过执行以下操作,仅在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

如何忽略文件路径并仅显示扩展名为?

的文件名

谢谢:)

2 个答案:

答案 0 :(得分:1)

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

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

请注意\\n的使用情况 - 您需要\n在文件名后添加新行,但添加另一个\作为转义或添加一些引号以防止解释{{1}通过shell

答案 1 :(得分:0)

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

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

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

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