Вибачте, якщо на це є відповідь в іншому місці, я не знаю, як шукати свою проблему.
Я виконував деякі імітації на Redhat Linux сервері HPC, і мій код для обробки структури папок для збереження виводу мав нещасний помилку. Мій код matlab для створення папки:
folder = [sp.saveLocation, 'run_', sp.run_number, '/'];
де sp.run_number
було ціле число. Я забув перетворити його на рядок, але чомусь запустити mkdir(folder);
(в matlab) все-таки вдалося. Насправді, симуляції пройшли без перешкод, і дані збереглись у відповідній директорії.
Тепер, коли структура папок запитується / друкується, я отримую такі ситуації:
- Коли я намагаюся вкласти вкладку автозаповнення:
run_ run_^A/ run_^B/ run_^C/ run_^D/ run_^E/ run_^F/ run_^G/ run_^H/ run_^I/
- Коли я використовую
ls
:run_ run_? run_? run_? run_? run_? run_? run_? run_? run_? run_?
. - Коли я переношу на свій mac за допомогою rsync,
--progress
параметр показує:run_\#003/
etc. з (я припускаю) число, яке відповідає цілому числу, доданеsp.run_number
до трьох цифр, тож 10-й запуск -run_\#010/
- Коли я переглядаю папки в пошуку, я бачу
run_ run_ run_ run_ run_ run_ run_ run_ run_ run_?
- Дивлячись на це питання і за допомогою команди
ls | LC_ALL=C sed -n l
я отримую:
run_$
run_\001$
run_\002$
run_\003$
run_\004$
run_\005$
run_\006$
run_\a$
run_\b$
run_\t$
run_$
Я не можу керувати cd
папками, використовуючи будь-яке із цих представлень.
У мене є тисячі цих папок, тому мені потрібно виправити це за допомогою сценарію. Який із цих варіантів є правильним поданням папки? Як я можу програмно посилатися на ці папки, щоб перейменувати їх на правильно відформатоване ім'я за допомогою скрипту bash? І я здогадуюсь заради цікавості, як, на пекло, це сталося в першу чергу?
run_
і мені потрібно щось набрати
/
. Будь-який інший символ дійсний, включаючи контрольні символи. Я не знаю, що зробив би matlab, якби sp.run_number був 0 (напевно, або перервав з помилкою, або створив run_
, оскільки байт NUL припинить рядок імені каталогу). Звичайно, це також було б проблематично для 16-бітових (або вище) значень, що мали в них байт NUL, а також змінюватиметься в залежності від ендіантності системи, що працює в системі matlab.
^A
буквально не^
слідуєA
, але Ctrl-A (ви можете ввести його за допомогою Ctrl-V Ctrl-A, оскільки Ctrl-A, як правило, є ярликом для оболонки).