Bash:在一个命令行中删除文件后缀

时间:2012-09-01 09:55:39

标签: bash command-line find

指定fiz.jsdir/buz.js等文件路径,如何删除后缀以获取fiz dir/buz

我最好的镜头(我正在寻找更简单的东西):

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

4 个答案:

答案 0 :(得分:2)

您只需bash(版本4)即可使用globstar获取递归文件列表。

$ shopt -s globstar
$ for i in **/*.js ; do echo "$i" "${i%.js}" ; done

对于bash手册页:

  

globstar

     

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

${x%ext}ext的末尾删除$x。有关详情,请参阅String manipulations

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

它可以工作,如果要覆盖现有文件,则必须添加-f以重命名(重命名-f)。

答案 3 :(得分:0)

这对我有用:rename ".js" "" *.js