Desculpe se isso tiver uma resposta em outro lugar, não faço idéia de como procurar pelo meu problema.
Eu estava executando algumas simulações em um servidor HPC redhat linux, e meu código para lidar com a estrutura de pastas para salvar a saída teve um bug infeliz. Meu código matlab para criar a pasta era:
folder = [sp.saveLocation, 'run_', sp.run_number, '/'];
onde sp.run_number
estava um número inteiro. Esqueci de convertê-lo em uma string, mas por algum motivo a execução mkdir(folder);
(no matlab) ainda teve êxito. De fato, as simulações foram executadas sem problemas e os dados foram salvos no diretório correspondente.
Agora, quando a estrutura da pasta é consultada / impressa, recebo as seguintes situações:
- Quando tento tabular o preenchimento automático:
run_ run_^A/ run_^B/ run_^C/ run_^D/ run_^E/ run_^F/ run_^G/ run_^H/ run_^I/
- Quando eu uso
ls
:run_ run_? run_? run_? run_? run_? run_? run_? run_? run_? run_?
. - Quando transfiro para o meu Mac usando o rsync, a
--progress
opção mostra:run_\#003/
etc. com (presumo) o número que corresponde ao número inteirosp.run_number
preenchido com três dígitos, portanto a 10ª execução érun_\#010/
- Quando visualizo as pastas no localizador, vejo
run_ run_ run_ run_ run_ run_ run_ run_ run_ run_?
- Olhando para esta pergunta e usando o comando
ls | LC_ALL=C sed -n l
, recebo:
run_$
run_\001$
run_\002$
run_\003$
run_\004$
run_\005$
run_\006$
run_\a$
run_\b$
run_\t$
run_$
Não consigo acessar cd
as pastas usando nenhuma dessas representações.
Eu tenho milhares dessas pastas, então precisarei corrigir isso com um script. Qual dessas opções é a representação correta da pasta? Como posso referenciar programaticamente essas pastas para renomeá-las com um nome formatado corretamente usando um script bash? E acho que por uma questão de curiosidade, como diabos isso aconteceu em primeiro lugar?
run_
e eu tenho que digitar algo
/
. Qualquer outro caractere é válido, incluindo caracteres de controle. Não sei o que o matlab teria feito se sp.run_number fosse 0 (provavelmente abortar com um erro ou produzir run_
, pois o byte NUL encerraria a string do nome do diretório). Obviamente, isso também seria problemático para valores de 16 bits (ou superiores) que continham um byte NUL e também variaria de acordo com a capacidade de endereçamento do sistema executando o matlab.
^A
não é literalmente^
seguido porA
, mas Ctrl-A (você pode digitar usando Ctrl-V Ctrl-A, pois Ctrl-A geralmente é um atalho para o shell).