首页 > 解决方案 > Bash 脚本返回给定扩展名的所有元素,而不使用打印标志

问题描述

我想创建在实际目录的所有文件夹中搜索并返回所有满足某些条件的文件的 shell 脚本,但不使用任何打印标志。(这里的条件是以.py结尾)

我做了什么:

find . -name '*.py'| sed -n 's/\.py$//p'

输出:

./123
./test
./abc/dfe/test3
./testing
./test2

我想达到的目标:

123
test
test3
testing
test2

标签: bashsed

解决方案


使用-exec

find . -name '*.py' -exec sh -c 'for f; do f=${f%.py}; echo "${f##*/}"; done' sh {} +

如果 GNUbasename是一个选项,您可以将其简化为

find . -name '*.py' -exec basename -s .py {} +

POSIXbasename稍微贵一点,因为您必须在每个文件上单独调用它:

find . -name '*.py' -exec basename {} .py \;

推荐阅读