簡體   English   中英

幫助這個.sh代碼

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM