標準ツールを使用して一括フォルダの名前を変更します。

標準ツールを使用して一括フォルダの名前を変更します。

複数のフォルダの名前を一括変更しようとしていますが、何らかの理由で私の方法がうまくいかないようです。次のスクリプトを使用しようとしていますが、何もしません。私はプログラミングが初めてなので、アドバイスをいただきありがとうございます。これが私のフォルダ名です。

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て最初の文字列以降のすべての項目を削除します.

おすすめ記事