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_numberbył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,
--progressopcja pokazuje:run_\#003/itd. Z (zakładam) liczbą pasującą do liczby całkowitej wsp.run_numberdopeł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 lotrzymuję:
run_$
run_\001$
run_\002$
run_\003$
run_\004$
run_\005$
run_\006$
run_\a$
run_\b$
run_\t$
run_$
Nie mogę zarządzać cdfolderami 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.
^Ajest 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).