今天下午我只寫了一個bash腳本。這很醜陋。所以我認爲在這裏必須有更好的方法來實施echo $x
。有沒有更好的方法來模擬標準輸入?
for x in $(ls); do
cp $x $(echo $x | sed s/\\./_holo_light./)
cp $x $(echo $x | sed s/\\./_holo_dark./)
done
今天下午我只寫了一個bash腳本。這很醜陋。所以我認爲在這裏必須有更好的方法來實施echo $x
。有沒有更好的方法來模擬標準輸入?
for x in $(ls); do
cp $x $(echo $x | sed s/\\./_holo_light./)
cp $x $(echo $x | sed s/\\./_holo_dark./)
done
而是執行此操作:
for x in *; do
cp "$x" "${x/./_holo_light.}"
cp "$x" "${x/./_holo_dark.}"
done
ls
。改用glob。sed
。 Bash可以執行string manipulation。爲什麼不乾脆:
ls | sed 's/a/c/g'
注意,從LS解析輸出有some issues,如果你確信你沒有影響,你可以做這樣的(GNU SED):
ls |
sed -nr 's/(.*)\.(.*)$/cp "\1.\2" "\1_holo_light.\2"\ncp "\1.\2" "\1_halo_dark.\2"/p' |
sh
雖然sed產生的複製命令其然後通過一個shell來執行。在追加| sh
之前查看sed的輸出。
+1如果您將引號添加到文件名,使用ls應該沒有問題。 – 2013-02-19 11:46:59
@OlafDietsche:是的,我同意這會緩解一些問題,補充並感謝你。 – Thor 2013-02-19 11:53:49
我更新了我的問題所取代。我不僅需要打印文件,而且需要重命名多個文件。 – 2013-02-19 08:56:53
@hongbosb不要問一個問題,然後編輯它來問一個不同的問題!看到dogbane對你實際想問的問題的回答。 – 2013-02-19 09:05:42
對不起,我的錯。 – 2013-02-19 10:04:07