2015-10-04 25 views
0

我只是想批量修改文件的後綴,但它不工作! 我下面使用的命令行:Shell命令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上工作。任何人都可以給我一些建議嗎? Thans提前。

+3

你在哪裏實際上重命名/移動磁盤上的文件? –

回答

4

因爲反引號是雙引號,它就會立即被殼,而不是通過對每個文件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 
+4

爲了避免不必要的管道,並且即使'file'不止一次包含字符串'html',也要考慮替換'newname = \'echo「$ file」| sed's/html/css/g'\''''newname = $ {file%html} css'。 – John1024

+0

非常感謝。我收到了。同樣感謝@ John1024 – enoder

0

使用GNU並行:

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