Maaf jika ada jawaban di tempat lain, saya tidak tahu bagaimana mencari masalah saya.
Saya menjalankan beberapa simulasi pada server HPC linux redhat, dan kode saya untuk menangani struktur folder untuk menyimpan output memiliki bug yang tidak menguntungkan. Kode matlab saya untuk membuat folder adalah:
folder = [sp.saveLocation, 'run_', sp.run_number, '/'];
dimana sp.run_number
bilangan bulat. Saya lupa mengonversinya menjadi string, tetapi karena alasan tertentu menjalankan mkdir(folder);
(di matlab) masih berhasil. Faktanya, simulasi berjalan tanpa hambatan, dan data disimpan ke direktori yang cocok.
Sekarang, ketika struktur folder ditanyai / dicetak saya mendapatkan situasi berikut:
- Ketika saya mencoba untuk tab autocomplete:
run_ run_^A/ run_^B/ run_^C/ run_^D/ run_^E/ run_^F/ run_^G/ run_^H/ run_^I/
- Ketika saya menggunakan
ls
:run_ run_? run_? run_? run_? run_? run_? run_? run_? run_? run_?
. - Ketika saya mentransfer ke mac saya menggunakan rsync
--progress
opsi menunjukkan:run_\#003/
dll dengan (saya berasumsi) nomor yang cocok dengan integer disp.run_number
padded menjadi tiga digit, jadi jalankan 10 adalahrun_\#010/
- Ketika saya melihat folder di finder saya melihat
run_ run_ run_ run_ run_ run_ run_ run_ run_ run_?
- Melihat pertanyaan ini dan menggunakan perintah
ls | LC_ALL=C sed -n l
saya dapatkan:
run_$
run_\001$
run_\002$
run_\003$
run_\004$
run_\005$
run_\006$
run_\a$
run_\b$
run_\t$
run_$
Saya tidak bisa mengelola cd
ke folder menggunakan representasi ini.
Saya memiliki ribuan folder ini, jadi saya harus memperbaikinya dengan skrip. Manakah dari opsi ini yang merupakan representasi folder yang benar? Bagaimana saya bisa merujuk secara terprogram ke folder-folder ini sehingga saya menamainya kembali dengan nama yang diformat dengan benar menggunakan skrip bash? Dan saya rasa demi rasa ingin tahu, bagaimana mungkin ini bisa terjadi?
run_
dan saya harus mengetikkan sesuatu
/
. Karakter lain apa pun yang valid, termasuk karakter kontrol. Saya tidak tahu apa yang akan dilakukan matlab jika sp.run_number adalah 0 (mungkin dibatalkan dengan kesalahan atau menghasilkan run_
, karena byte NUL akan mengakhiri string nama direktori). Tentu saja, ini juga akan bermasalah untuk 16-bit (atau lebih tinggi) nilai-nilai yang memiliki byte NUL di dalamnya, dan juga akan bervariasi sesuai dengan endian-ness dari sistem yang menjalankan matlab.
^A
tidak secara harfiah^
diikuti olehA
, tetapi Ctrl-A (Anda dapat mengetiknya menggunakan Ctrl-V Ctrl-A karena Ctrl-A umumnya merupakan jalan pintas untuk shell).