Lot renommer des photos par date de création sur Mac OS X en utilisant Bash ne fonctionnant pas avec des espaces

1

Je cherchais une solution permettant de renommer par lots des photos sur Mac OS X. J'ai trouvé de nombreuses solutions, mais la plupart d'entre elles ne fonctionnent pas si le fichier contient un espace ou si je souhaite le faire. dans le nom du fichier.

Par exemple, j'ai trouvé ce script:

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

Le script fonctionne tant que je ne mets pas d'espace dans le nom de fichier final (je veux un espace dans le nom de fichier car je renomme mes fichiers avec des espaces depuis 3 ans sous Windows). Et il se casse également si le fichier lui-même a un espace. Donc, si j'ai une photo appelée "Hello World.jpg", elle ne sera pas traitée.

Quelqu'un aurait-il une solution, s'il vous plaît? Cela ne nécessite de préférence aucun logiciel supplémentaire (je veux juste pouvoir copier / coller ce script chaque fois que je change de machine).

Je vous remercie!

Xtrimsky
la source

Réponses:

3

Vous devez utiliser des guillemets dans vos substitutions:

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

Il doit s'agir de guillemets doubles pour permettre la modification et l' $()expansion.

AFH
la source
Pour une raison quelconque, cela supprime tout fichier contenant un espace. Je ne sais pas trop pourquoi.
Xtrimsky
Si vous ajoutez echodevant mv, vous pouvez voir quelles seront les commandes.
AFH
Vous avez besoin de guillemets autour $ide $(... $i). (Cela fonctionne, malgré les guillemets extérieurs.) Vous devez généralement mettre les guillemets doubles autour de toute substitution de variable, sauf si vous avez une raison spécifique de ne pas le faire.
Jpaugh
Oui, vous avez raison: j'ai supposé à tort que les citations extérieures couvraient les deux. J'ai mis à jour ma réponse. Mea culpa.
AFH
@xtrimsky - J'ai mis à jour ma réponse avec une série supplémentaire de citations, en réponse au commentaire de @ jphaugh. Désolé pour l'omission précédente - je testais sur Linux, mais les statoptions semblent être différentes et j'ai raté les guillemets intérieurs.
AFH
0

Normalement, il suffirait de remplacer $ipar "$i".

Gerard H. Pille
la source
C'est plus un commentaire qu'une réponse.
C0deDaedalus
@KamilMaciorowski C'est la 5ème définition de l'adjectif: thefreedictionary.com/normally
Gerard H. Pille
C'est suffisant. Vote négatif révoqué.
Kamil Maciorowski
@ KamilMaciorowski Respect, vous pouvez prendre une blague!
Gerard H. Pille