命令行/bash .sh过滤器

命令行/bash .sh过滤器

命令行搜索目录中的所有文件名。文件名不带.sh

输出示例:

$>./file.sh -e

答案1

find . -name \*.sh | sed 's/\.sh$//'

或者

find . -name \*.sh -print0 | xargs -0 basename -a -s .sh "{}" \;

答案2

使用bash:

shopt -s globstar
for f in **/*.sh; do printf '%s\n' "${f%*.sh}"; done

答案3

find . -type f -name '*.sh' \
    -exec sh -c 'for n; do basename "$n" .sh; done' sh {} +

或与find知道的人-execdir

find . -type f -name '*.sh' \
    -execdir sh -c 'echo "${1%.sh}"' sh {} \;

(效率稍低,因为sh -c每个找到的文件调用一次)。

即查找当前目录下所有名称以.sh.将这些名称(包括路径)传递给子 shell,该子 shell 迭代找到的名称,调用basename每个名称来删除路径和名称的扩展名。


我不会将其称为“过滤器”,因为它实际上不会过滤任何内容,除非您将从完整路径中解析出基本名称称为“过滤器”,或者排除不是具有指定文件的文件的目录名称名称后缀。

过滤器通常是在一端读取数据,对其进行转换,然后在另一端吐出一些内容(可能输入到另一个转换中)。

相关内容