命令行搜索目录中的所有文件名。文件名不带.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
每个名称来删除路径和名称的扩展名。
我不会将其称为“过滤器”,因为它实际上不会过滤任何内容,除非您将从完整路径中解析出基本名称称为“过滤器”,或者排除不是具有指定文件的文件的目录名称名称后缀。
过滤器通常是在一端读取数据,对其进行转换,然后在另一端吐出一些内容(可能输入到另一个转换中)。