Bash:一条命令中删除文件后缀

3

如何从文件路径中获取 fiz dir/buz,例如 fiz.jsdir/buz.js?

我的最佳方案(我正在寻找更简单的方法):

find -name '*.js'| \
 xargs -I{} echo {} | \
 sed 's/.js$//' | \
 xargs -I{} mv {}.js {}
4个回答

2
你可以使用仅有的bash(版本4)来实现,通过使用globstar获取递归文件列表。
$ shopt -s globstar
$ for i in **/*.js ; do echo "$i" "${i%.js}" ; done

针对bash man页面:

globstar

如果设置了此选项,在路径名扩展上下文中使用的模式**将匹配所有文件和零个或多个目录和子目录。如果模式后跟着一个 /,则只匹配目录和子目录。

${x%ext}$x的结尾处删除ext。有关更多信息,请参见字符串操作


0
echo "fiz.js"|awk -F. '{print $1}'

echo "dir/buz.js"|awk -F. '{print $1}'

0
find -name '*.js'|  xargs -I file rename 's/\.js$//' file

它可以工作,如果你想覆盖现有的文件,你必须添加一个 -f 来重命名(rename -f)。


1
请仅使用答案来提供答案,而不是提出自己的问题。 - Gordon

0
这对我很有效: rename ".js" "" *.js

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接