/ / Problèmes avec le script de changement de nom Bash - bash, macos, terminal, renommer

Problèmes avec Bash renommer le script - bash, macos, terminal, renommer

J'ai un script bash très simple que je suis "men cours d'exécution dans le terminal OSX. Il est conçu pour renommer des fichiers en utilisant des chemins d'accès spécifiques. Cela fonctionnait bien il y a quelques mois, mais récemment, toutes sortes de choses folles lui sont arrivées et je ne sais pas pourquoi.

Voici le code:

mv() { command mv "$@"; sleep 1; }
mv -nv /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_alternate1.tif /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_alternate1A.tif
mv -nv /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_alternate2.tif /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_alternate2A.tif
mv -nv /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_alternate3.tif /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_alternate3A.tif
mv -nv /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_alternate4.tif /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_alternate4A.tif
mv -nv /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_lifestyle.tif /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_lifestyleA.tif
mv -nv /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_standard.tif /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_standardA.tif

Je l'ai couru avec et sans la première ligne. J'ai ajouté le délai de veille, car je soupçonnais que le problème était causé par un service informatique trop agressif perturbant Terminal, ce qui pourrait toujours être le cas, mais dans tous les cas, le script ne fonctionne pas.

Voici ce que Terminal retourne quand je le lance:

mv -nv /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_alternate1.tif /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_alternate1A.tif
mv -nv /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_alternate2.tif /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_alternate2A.tif
mv -nv /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_alternate3.tif /Volumes/COMMON-LIC-PHOTO/DATA/James/Remv -nvest/1140122_alternate3A.tif
mv -nv /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_alternate4.tif /Volumes/COMMON-LIC-PHOTO/DATA/James/Remv -nTest/1140122_alternate4A.tif
mv -nv /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_lifestyle.tif /Volumes/COMMON-LIC-PHOTO/DATA/James/Renmv -nv /Volume22_lifestyleA.tif
mv -nv /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_standard.tif /Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122_standardA.tifç^C^C^C^C^C

Comme vous pouvez le constater, le fichier est un véritable gâchisrenommer ainsi que les chemins de fichiers, qui ne changent même pas. Je ne fais que rajouter littéralement la lettre A entre la fin du nom du fichier et son extension.

Est-ce que quelqu'un voit quelque chose ici qui pourrait êtrefaire que cela se produise? Notre service informatique a récemment commencé à utiliser une passerelle de contenu appelée WebSense pour surveiller les activités de l'entreprise. Est-il possible que cela pose problème?

Réponses:

1 pour la réponse № 1

Tu ne nous as pas dit (pour le moment) Comment vous invoquez votre script.

Si votre script était encore reconnu comme un exécutable, il ne produirait pas le résultat que vous déclarez - il ne ferait pas que écho votre script, nonobstant les caractères de fin supplémentaires.

  • Si vous appelez votre script directement:

    • Avez-vous un script ligne de shebang, comme le script ci-dessous?
    • At-il été marqué comme exécutable, avec chmod +x <file>?
  • Sinon: à quel exécutable le passez-vous?

  • Votre script contient-il des caractères inattendus, qui s'affichent avec le préfixe ^ (tel que ^M pour CR (r) les caractères) ou M- si tu cours LC_ALL=C cat -et <file>, comme Jonathan Leffler suggère?

  • Comme Jonathan le suggère plus loin: invoquez-vous peut-être votre script dans son ensemble avec sh -nv <file> ou bash -nv <file>, ce qui expliquerait au moins pourquoi code source est imprimé (-v) sans exécuter le scénario (-n), même s’il n’explique pas en soi les caractères de fin inattendus.

En attendant, voici une reformulation de votre script dans l’esprit de SEC:

#!/bin/bash

pathPrefix="/Volumes/COMMON-LIC-PHOTO/DATA/James/Rename_Test/1140122"

files=(
"${pathPrefix}_alternate1.tif"
"${pathPrefix}_alternate2.tif"
"${pathPrefix}_alternate3.tif"
"${pathPrefix}_alternate4.tif"
"${pathPrefix}_lifestyle.tif"
"${pathPrefix}_standard.tif"
)

for file in "${files[@]}"; do
mv -nv "$file" "${file%.tif}a.tif"
done