Mac OS X で Bash を使用して作成日ごとに写真の名前を一括変更すると、スペースが機能しない

Mac OS X で Bash を使用して作成日ごとに写真の名前を一括変更すると、スペースが機能しない

Mac OS X で写真を一括して名前変更する方法について解決策を探していました。多くの解決策を見つけましたが、ファイルにスペースが含まれている場合やファイル名にスペースを入れたい場合には、そのほとんどは機能しません。

たとえば、次のスクリプトを見つけました:

for i in *.jpg; do newname=$(stat -t %Y-%m-%d_%H.%M.%S -f %Sm -- $i); mv -- $i $newname.jpg; done

最終的なファイル名にスペースを入れない限り、スクリプトは機能します (私は過去 3 年間 Windows でスペースを含むファイル名を変更してきたので、ファイル名にはスペースが必要です)。また、ファイル自体にスペースが含まれている場合もスクリプトは機能しません。つまり、「Hello World.jpg」という写真がある場合、処理されません。

どなたか解決策をお持ちの方はいらっしゃいませんか? できれば追加のソフトウェアを必要としない方法 (マシンを切り替えるたびにそのスクリプトをコピー/貼り付けできるようにしたいだけです)。

ありがとう!

答え1

置換では引用符を使用する必要があります。

for i in *.jpg; do newname="$(stat -t %Y-%m-%d_%H.%M.%S -f %Sm -- "$i")"; mv -- "$i" "$newname.jpg"; done

変数と拡張を許可するには二重引用符が必要です$()

答え2

$i通常はを に置き換えるだけで十分です"$i"

関連情報