Désolé si cela a une réponse ailleurs, je ne sais pas comment rechercher mon problème.
J'exécutais des simulations sur un serveur HPC Linux redhat, et mon code pour gérer la structure des dossiers pour enregistrer la sortie avait un bug malheureux. Mon code matlab pour créer le dossier était:
folder = [sp.saveLocation, 'run_', sp.run_number, '/'];
où sp.run_number
était un entier. J'ai oublié de le convertir en chaîne, mais pour une raison quelconque, l'exécution mkdir(folder);
(dans matlab) a quand même réussi. En fait, les simulations se sont déroulées sans accroc et les données ont été enregistrées dans le répertoire correspondant.
Maintenant, lorsque la structure du dossier est interrogée / imprimée, j'obtiens les situations suivantes:
- Lorsque j'essaie de tabuler la saisie semi-automatique:
run_ run_^A/ run_^B/ run_^C/ run_^D/ run_^E/ run_^F/ run_^G/ run_^H/ run_^I/
- Quand je l' utilise
ls
:run_ run_? run_? run_? run_? run_? run_? run_? run_? run_? run_?
. - Lorsque je transfère sur mon mac à l'aide de rsync, l'
--progress
option affiche:run_\#003/
etc. avec (je suppose) le nombre correspondant à l'entier ensp.run_number
capitonné à trois chiffres, donc la 10e exécution estrun_\#010/
- Lorsque je regarde les dossiers dans le Finder, je vois
run_ run_ run_ run_ run_ run_ run_ run_ run_ run_?
- En regardant cette question et en utilisant la commande
ls | LC_ALL=C sed -n l
que j'obtiens:
run_$
run_\001$
run_\002$
run_\003$
run_\004$
run_\005$
run_\006$
run_\a$
run_\b$
run_\t$
run_$
Je ne parviens pas à cd
accéder aux dossiers à l'aide de ces représentations.
J'ai des milliers de ces dossiers, je vais donc devoir corriger cela avec un script. Laquelle de ces options est la représentation correcte du dossier? Comment puis-je faire référence par programmation à ces dossiers afin de les renommer avec un nom correctement formaté à l'aide d'un script bash? Et je suppose que par curiosité, comment diable est-ce arrivé en premier lieu?
run_
je dois taper quelque chose
/
. Tout autre caractère est valide, y compris les caractères de contrôle. Je ne sais pas ce que matlab aurait fait si sp.run_number était égal à 0 (probablement abandonner avec une erreur ou produire run_
, car l'octet NUL mettrait fin à la chaîne de nom du répertoire). Bien sûr, cela serait également problématique pour les valeurs 16 bits (ou plus) qui contenaient un octet NUL, et varierait également en fonction de l'endian-ness du système exécutant matlab.
^A
n'est pas littéralement^
suivi deA
, mais Ctrl-A (vous pouvez le taper en utilisant Ctrl-V Ctrl-A car Ctrl-A est généralement un raccourci pour le shell).