← index #17267Issue #18657
Off-topic · high · value 3.240
QUERY · ISSUE

mpremote gives false error if a destination directory doesn't exist for recursive copy

openby mattvennopened 2025-05-08updated 2025-09-05
bugtools

Port, board and/or hardware

rp2040

MicroPython version

MicroPython v1.24.0 on 2024-10-25; Raspberry Pi Pico with RP2040

Reproduction

create a directory 'test' on the target and 'local' on host
then run:

mpremote cp -r local  :testt 

note typo in destination

Expected behaviour

the error message should be 'destination doesn't exist'

Observed behaviour

cp local :testt
mpremote: cp: -r not specified; omitting directory

Additional Information

No, I've provided everything above.

Code of Conduct

Yes, I agree

CANDIDATE · ISSUE

mpremote cp fails with apostrophe in destination filename

openby Josverlopened 2026-01-07updated 2026-01-09
bugtoolsunicode

Port, board and/or hardware

Any platform (Windows, Linux, macOS) - affects mpremote tool when copying files with apostrophe (') in the filename.

MicroPython version

  • mpremote 1.27.0
  • Tested against MicroPython unix port and ESP32

The issue is in mpremote itself, not in MicroPython firmware.

Reproduction

  1. Create a test file with an apostrophe in the name:

    mkdir unicode_test
    echo "test" > "unicode_test\O'zbek_Ismoilov.txt"
    
  2. Attempt to copy to MicroPython device with the same destination name:

    mpremote cp "unicode_test\O'zbek_Ismoilov.txt" ":/O'zbek_Ismoilov.txt"
    
  3. Observe the error.

Expected behaviour

mpremote cp should successfully copy files with apostrophes in filenames. The apostrophe should be properly escaped when constructing Python commands to send to the MicroPython REPL.

Observed behaviour

The command fails with a SyntaxError because the apostrophe breaks the Python string literal sent to the REPL.

PS D:\mypython\unicode_mpy> mpremote cp "unicode_test\O'zbek_Ismoilov.txt" ":/O'zbek_Ismoilov.txt"
cp unicode_test\O'zbek_Ismoilov.txt :/O'zbek_Ismoilov.txt
mpremote: Error with transport:
Traceback (most recent call last):
  File "<stdin>", line 1
SyntaxError: invalid syntax

Additional Information

mpremote sends filenames to MicroPython's REPL as Python string literals using single quotes. When a filename contains an apostrophe ', it prematurely closes the string:

# What mpremote probably sends:
open('/O'zbek_Ismoilov.txt', 'wb')
#        ^ This closes the string prematurely!

# Result is invalid Python syntax

Affected Characters

Any filename containing:

  • Single quote / apostrophe: ' (U+0027)
  • Possibly other quote-like characters that need escaping

Suggested Fix

Properly escape quotes when constructing Python commands to send to the REPL:

Option A: Escape single quotes

# Instead of:
cmd = f"open('{filename}', 'wb')"

# Use:
escaped_filename = filename.replace("\\", "\\\\").replace("'", "\\'")
cmd = f"open('{escaped_filename}', 'wb')"

Option B: Use double quotes for filenames

cmd = f'open("{filename}", "wb")'
# Note: would then need to escape double quotes in filenames

Option C: Use repr() for proper escaping

cmd = f"open({repr(filename)}, 'wb')"

Found via : https://github.com/Josverl/unicode_mpy

Code of Conduct

Yes, I agree

Keyboard

j / / n
next pair
k / / p
previous pair
1 / / h
show query pane
2 / / l
show candidate pane
c
copy suggested comment
r
toggle reasoning
g i
go to index
?
show this help
esc
close overlays

press ? or esc to close

copied