Przepraszam, jeśli ma to gdzie indziej odpowiedź, nie mam pojęcia, jak wyszukać mój problem.
Uruchomiłem kilka symulacji na serwerze redhat Linux HPC, a mój kod do obsługi struktury folderów w celu zapisania danych wyjściowych miał niefortunny błąd. Mój kod Matlab do utworzenia folderu to:
folder = [sp.saveLocation, 'run_', sp.run_number, '/'];
gdzie sp.run_number
była liczba całkowita. Zapomniałem przekonwertować go na ciąg, ale z jakiegoś powodu uruchomienie mkdir(folder);
(w Matlabie) nadal się powiodło. W rzeczywistości symulacje przebiegły bez żadnych problemów, a dane zostały zapisane w odpowiednim katalogu.
Teraz, gdy struktura folderów jest sprawdzana / drukowana, otrzymuję następujące sytuacje:
- Kiedy próbuję uzupełnić kartę autouzupełnianiem:
run_ run_^A/ run_^B/ run_^C/ run_^D/ run_^E/ run_^F/ run_^G/ run_^H/ run_^I/
- Kiedy używać
ls
:run_ run_? run_? run_? run_? run_? run_? run_? run_? run_? run_?
. - Kiedy przesyłam do mojego komputera Mac przy użyciu rsync,
--progress
opcja pokazuje:run_\#003/
itd. Z (zakładam) liczbą pasującą do liczby całkowitej wsp.run_number
dopełnieniu do trzech cyfr, więc 10. przebieg jestrun_\#010/
- Kiedy przeglądam foldery w wyszukiwarce, widzę
run_ run_ run_ run_ run_ run_ run_ run_ run_ run_?
- Patrząc na to pytanie i używając polecenia
ls | LC_ALL=C sed -n l
otrzymuję:
run_$
run_\001$
run_\002$
run_\003$
run_\004$
run_\005$
run_\006$
run_\a$
run_\b$
run_\t$
run_$
Nie mogę zarządzać cd
folderami przy użyciu tych reprezentacji.
Mam tysiące tych folderów, więc muszę to naprawić za pomocą skryptu. Która z tych opcji jest poprawną reprezentacją folderu? Jak mogę programowo odwoływać się do tych folderów, aby zmienić ich nazwę na poprawnie sformatowaną nazwę za pomocą skryptu bash? I chyba ze względu na ciekawość, jak do diabła to się stało?
run_
i muszę coś
/
. Każdy inny znak jest prawidłowy, w tym znaki kontrolne. Nie wiem, co zrobiłby Matlab, gdyby sp.run_number miał wartość 0 (prawdopodobnie przerwałby z błędem lub produkował run_
, ponieważ bajt NUL zakończyłby ciąg nazwy katalogu). Oczywiście byłoby to również problematyczne dla 16-bitowych (lub wyższych) wartości, które zawierały bajt NUL, a także zmieniałoby się w zależności od endianowości systemu z uruchomionym matlabem.
^A
jest też dosłownie^
po nimA
, ale Ctrl-A (możesz wpisać go za pomocą Ctrl-V Ctrl-A, ponieważ Ctrl-A jest ogólnie skrótem do powłoki).