1

ディレクトリ内のすべてのファイルのプレフィックスを別のプレフィックスに置き換えようとしています (名前の変更)。

これは私のスクリプトです

# Script to rename the files
#!/bin/bash
for file in $1*;
do
    mv $file `echo $file | sed -e 's/^$1/$2/'`;
done

でスクリプトを実行すると

rename.sh BIT SIT

次のエラーが表示されます

mv: `BITfile.h' and `BITFile.h' are the same file
mv: `BITDefs.cpp' and `BITDefs.cpp' are the same file
mv: `BITDefs.h' and `BITDefs.h' are the same file

とを同じ値としてsed扱っているようですが、これらの変数を別の行に出力すると、それらが異なることが示されます。$1$2

4

4 に答える 4

3

Roman Newaza が言うように、変数を展開するように Bash に指示する"代わりに、の代わりに使用できます。'ただし、あなたの場合、次のように書くのが最も安全です。

for file in "$1"* ; do
    mv -- "$file" "$2${file#$1}"
done

ファイル名やスクリプト パラメータに奇妙な文字が含まれていても問題が発生しないようにします。

于 2013-06-20T07:00:15.143 に答える
0

二重引用符を使用しない場合、変数は展開されません。

むしろこれ使うわ

#!/bin/bash
for file in $1*;
do
   mv "$file" "$1${file:${#2}}"
done

どこ

${file:${#2}

引数 2 の長さから末尾までの部分文字列を意味します

于 2013-06-20T07:00:22.100 に答える