简体   繁体   中英

Shell command xargs & sed doesn't work

I just want to batch modify the suffix of the files,but it doesn't work! The command line I used as below:

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

However, when I just used ls *html ,it shows:

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

used ls *html | sed 's/html/css/g' ls *html | sed 's/html/css/g' ,it shows as I expected! like this:

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

I work on Mac OS. Could anyone give me some suggestions? Thans in advance.

Because the backquotes are in double quotes, it gets executed immediately by the shell and not by xargs on each file.

The result is the same as

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

However, if you use single quotes, you run into other troubles. You end up having to do something like this:

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

but it gets to be a mess, and we haven't even got to the actual renaming yet.

Using a loop is a bit nicer:

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

使用GNU并行:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM