Shell使用sed从查找结果中删除文件扩展名

时间:2018-05-16 21:07:40

标签: bash shell sed find

我正在尝试运行

find . \ -type f -name "*.sh" -exec basename {} \; | sed "s/.sh/ "

显示以.sh结尾的currenty directoy和子目录中的所有文件。我使用-exec basename {}删除文件的位置,所以我只是自己获取文件名。 find命令工作正常,但是当我将它传递到sed "s/.sh/ "时,我收到一条错误消息sed: 1: "s/.sh/ ": unterminated substitute in regular expression。我试图用任何内容替换.sh扩展名,所以我只获取文件名。

2 个答案:

答案 0 :(得分:2)

您只是错过了sed上的关闭/

find . -type f -name "*.sh" -exec basename {} \;  | sed "s/\.sh//"

答案 1 :(得分:1)

basename可以为您删除扩展程序。

find . -type f -name '*.sh' -exec basename {} .sh \;

请注意,这适用于所有有效文件名,而不仅仅是不包含换行符的文件名。

如果您的basename命令支持此功能,则可以使用-s选项最大限度地减少对所需basename的呼叫次数。

find . -type f -name '*.sh' -exec basename -s .sh {} +

这允许将多个文件名传递给basename的每次调用。