
複数のフォルダの名前を一括変更しようとしていますが、何らかの理由で私の方法がうまくいかないようです。次のスクリプトを使用しようとしていますが、何もしません。私はプログラミングが初めてなので、アドバイスをいただきありがとうございます。これが私のフォルダ名です。
test.custom.tmp untitledfolder.custom.tmp wis.custom.tmp
名前を次のように変更する必要があります。
test untitledfolder wis
次のスクリプトを使用していますが、何もしません。
while read line; do
newname=$(echo "$line" | cut -f 1 -d '_')
mv $line newname;
done < read
ここでは、名前を変更する必要があるすべてのフォルダ名を含むreadというファイルを作成しました。
このスクリプトには何の問題があり、これを行うより良い方法がありますか?ありがとうございます。
答え1
簡単な方法は次のとおりです。
$ for d in *.custom.tmp/; do
echo mv -- "$d" "${d%%.*}"
done
mv -- test.custom.tmp/ test
mv -- untitledfolder.custom.tmp/ untitledfolder
mv -- wis.custom.tmp/ wis
これが希望の結果であると確信している場合は、それを削除してくださいecho
。
${d%%.*}
これはパラメータ拡張、正確に言えば:
${パラメータ%単語}
${パラメータ%%単語}
単語が展開され、パターンが生成され、以下の規則に従って一致します(パターン一致を参照)。パターンがパラメータ拡張値の末尾の部分と一致する場合、拡張結果は、最短一致パターン(「%」ケース)または最長一致パターン(「%%」ケース)を持つパラメータ値を削除します。
この場合、文字列を使用しtest.custom.tmp
て最初の文字列以降のすべての項目を削除します.
。
答え2
方法を維持するには:
while read line; do
newname=$(echo "$line" | cut -f 1 -d '.');
mv $line $newname;
done < read
区切り文字は点()であり、文字列ではなく変数-d '.'
としても使用されることに注意してください。$newname
これによりスクリプトエラーが修正されますが、より良いアプローチに使用できます。@schrodingerscatcuriosityの答え。