TUTORIAL

File Transfer

Move files between your machine and a box without turning the transfer into a shell script exercise.

This page covers the direct file path between your machine and a box. It works well for code, seed data, and build artifacts without turning the transfer into a shell exercise.

Local to box

Make one small local directory, then upload it:

mkdir -p ./project
printf 'hello from run9\n' > ./project/README.md
run9 box create work
run9 box exec work mkdir -p /work
run9 box cp ./project work:/work/
run9 box exec work ls -la /work/project

After the last command, the box contains /work/project/README.md.

Box to local

Create one file inside the box, then download it:

run9 box exec work mkdir -p /work/out
printf 'report from run9\n' | run9 box exec work -i tee /work/out/report.txt >/dev/null
run9 box cp work:/work/out/report.txt ./report.txt

Now ./report.txt is back on your machine.

How box paths work

box cp moves data between your machine and one box, so one side stays local and the other uses a box path:

box-id:/absolute/path

Local-to-local and box-to-box copies are separate workflows. When copying a local directory, end the target with / so the directory name is kept under that target. Create the destination directory first when you want the upload to land inside an existing place.

Output

Default output confirms the transfer:

OK: Copied ./project to work:/work/project.

Use JSON for a scriptable transfer summary:

run9 --json box cp ./project work:/work/