如何在当前目录及子目录下显示不带.sh扩展名的文件名?
提取当前及子目录下不带.sh扩展名的文件名
以下几种方法可以实现需求:
使用
find结合basename命令(最可靠,适配含多个.的文件名):find -type f -name "*.sh" -exec basename {} .sh \;basename的第二个参数指定要移除的后缀,只会去掉文件名末尾的.sh,比如test.file.sh会输出test.file。使用
find配合sed做后缀替换:find -type f -name "*.sh" -printf "%f\n" | sed 's/\.sh$//'sed的正则表达式会匹配行尾的.sh并替换为空,效果和basename方法一致,适合需要对输出做进一步管道处理的场景。使用
awk分割文件名(仅适合文件名不含多个.的情况):find -type f -name "*.sh" -printf "%f\n" | awk -F. '{print $1}'这个方法以
.为分隔符取第一个字段,但如果文件名是test.abc.sh,会输出test而不是test.abc,所以只适用于文件名只有一个.的场景。
内容的提问来源于stack exchange,提问作者Femi-Laizer
相关产品推荐
相关产品推荐

