我正在尝试运行
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
扩展名,所以我只获取文件名。
答案 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
的每次调用。