Shell命令xargs& sed不起作用

时间:2015-10-04 04:32:36

标签: bash shell sed xargs

我只是想批量修改文件的后缀,但它不起作用! 我使用的命令行如下:

ls *html | xargs  -I{}  echo "\`echo {} |  sed 's/html/css/g'\`"

但是,当我刚使用ls *html时,它会显示:

file1.html  file2.html  file3.html  file4.html  file5.html

使用了ls *html | sed 's/html/css/g',它显示了我的预期! 像这样:

file1.css file2.css file3.css file4.css file5.css

我在Mac OS上工作。有人能给我一些建议吗? 提前完成。

2 个答案:

答案 0 :(得分:4)

因为反引号是双引号,所以它由shell立即执行,而不是由每个文件上的xargs执行。

结果与

相同
ls *html | xargs -I{} echo "{}"

但是,如果使用单引号,则会遇到其他问题。你最终不得不做这样的事情:

ls *html | xargs -I{} sh -c 'echo `echo {} | sed '\''s/html/css/g'\''`'

但它变得一团糟,我们还没有实际重命名。

使用循环更好一点:

for file in *html; do
  newname=${file%html}css
  mv "$file" "$newname"
done

答案 1 :(得分:0)

使用GNU Parallel:

ls *html | parallel echo before {} after {.}.css