2017-05-25 4 views
0

J'ai un script bash très simple que j'utilise dans OSX Terminal. Il est conçu pour renommer les fichiers en utilisant des chemins de fichiers spécifiques. Il fonctionnait bien il y a quelques mois mais récemment toutes sortes de choses folles lui arrivent et je ne sais pas pourquoi.Problèmes avec le script de renommer Bash

Voici le code:

mv() { command mv "[email protected]"; 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 

J'ai couru avec et sans la première ligne. J'ai ajouté le délai de sommeil car je soupçonnais que ce qui causait les problèmes était un service informatique trop agressif perturbant Terminal, ce qui pourrait être toujours le cas, mais de toute façon le script ne fonctionne pas.

Voici ce 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 voir fait un véritable gâchis du fichier renommer ainsi que les chemins de fichiers qui ne sont même pas changé. Je suis littéralement en train d'ajouter la lettre A entre la fin du nom de fichier et l'extension du fichier.

Est-ce que quelqu'un voit quelque chose ici qui pourrait causer cela? Notre service informatique a récemment commencé à utiliser une passerelle de contenu appelée WebSense pour surveiller l'activité de l'entreprise, est-il possible qu'elle cause les problèmes?

+2

Y at-il danger que votre script a été près d'une machine Windows, ou autrement été contaminés par retour chariot (^ M) caractères? Je ne suis pas sûr que cela expliquerait ce que vous voyez facilement, mais je me demandais juste. Comment l'exécutez-vous? 'sh script.sh'? Avez-vous essayé 'bash -x script.sh' (ou' sh -x script.sh')? –

+0

Oui, c'est certainement près d'une machine Windows. Les chemins d'accès aux fichiers doivent être recherchés dans Windows car nous ne disposons pas encore d'une configuration pour une communication correcte entre notre serveur Windows et nos Macs. Ces chemins de fichier sont placés dans un document Excel que je formate ensuite dans TextWrangler pour être utilisé dans le code. Mais, il est tout à fait possible que ça fasse des dégâts. Je devrais aussi essayer de l'exécuter dans un shell et pas directement dans Terminal. –

Répondre

1

Vous ne nous avez pas encore dit comment invoquez votre script.

Si votre script était encore reconnu comme un exécutable , elle ne produirait pas la sortie, vous dites - il ne serait pas juste echo votre script, les caractères de suivi supplémentaires nonobstant.

  • Si vous appeler votre script directement:

    • vous créez un script a un shebang line, comme le script ci-dessous?
    • A-t-il été marqué comme exécutable, avec chmod +x <file>?
  • Sinon: Dans quel exécutable le transmettez-vous?

  • Est-ce que votre script contient des caractères inattendus, qui montrent avec préfixe ^ (comme ^M pour CR (\r).) Ou caractères M- si vous exécutez LC_ALL=C cat -et <file>, comme Jonathan Leffler suggère?

  • Comme Jonathan suggère en outre: êtes-vous peut-être invoquent votre script comme entier avec sh -nv <file> ou bash -nv <file>, ce qui aurait au moins expliquer pourquoi le code source est imprimé (-v) sans exécuter le script (-n), bien qu'il n'explique pas en soi les caractères finaux inattendus.

En attendant, voici une reformulation de votre script dans l'esprit de DRY:

#!/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 
+0

Notez que sur macOS, la commande 'mv' a l'option' -v' qui est décrite comme suit: _'-v' Cause 'mv' est verbeux, montrant les fichiers après leur déplacement._ –

+0

@JonathanLeffler: Oui, mais cela provoque le type de sortie suivant, bien distinct du code source: 'foo -> bar'. – mklement0

+0

OK; Je me demande s'il utilise 'sh -nv script.sh'? –