[英]Help with this .sh code
我正在嘗試創建一個shell腳本,當您在終端中輸入類似內容時,它會更改文件擴展名:
extcha xx yy * .xx
這是我制作的代碼
#!/bin/sh
while [ *.$1 ] ; do
export name=`basename $i .$1`
echo mv $name.$1 $name.$2
done;
這似乎不起作用。 誰能告訴我哪里出錯了?
這是你的意思:
for name in *.$1; do
stripped_name="$(basename "$name" ".$1")"
mv "$name.$1" "$name.$2"
done
你的最大缺陷是while循環只是評估那個條件,有效地測試了那個具有該形式名稱的文件的存在。 它不會在任何變量中存儲任何內容 - 當然也不像$i
那樣隨意。 你也不需要在這里輸出任何東西。 這只是讓它對您不需要的子進程可見。
當然,您可以真正使用重命名實用程序。 與基本的(紅帽和朋友):
# Note that this will actually rename abc.foo.foo to abc.bar.foo
# since it replaces the first match.
rename .foo .bar *.foo
和花哨的perl one(debian / ubuntu):
rename 's/.foo$/bar/' *.foo
你可以使用rename
實用程序......它就是這樣做的。
編輯:腳本。
#!/bin/bash
from="$1"
shift
to="$1"
shift
IFS="
"
for f in $@
do
basefile="`basename "$f" ".$from"`"
if [ ! "$basefile" = "$f" ]
then
echo mv "$basefile.$from" "$basefile.$to"
fi
done
改成:
for i in *.$1 ; do
name=`basename $i .$1`
mv $name.$1 $name.$2
done
不要忘記添加一些錯誤檢查(例如,有兩個參數)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.