загрузка файла curl с точкой с запятой в имени файла - PullRequest
1 голос
/ 17 марта 2012

Я использую автоматический загрузчик файлов из командной строки, используя curl для сервлета.

Проблема в том, что у меня десятки тысяч файлов с точками с запятой (;) в именах файлов. Мне хорошо известно об этом, но это устаревшее приложение, которое продолжает создавать новые файлы каждый день. Переименование на самом деле не вариант по причинам совместимости ниже по течению.

Я пытался процитировать, экранировать, преобразовать в "% 3b", полностью указать путь ... очевидный материал ... но, похоже, ничего не работает, и он не может отправить со стороны клиента. Я нахожусь на своем Mac (в комплекте curl версии 7.21.3), но это не должно иметь значение?

Есть идеи?

macbookpro:~$ curl -F upload=@"my file.txt" http://localhost:8080/data/upload
ok
macbookpro:~$ curl -F upload=@"my;file.txt" http://localhost:8080/data/upload
curl: (26) failed creating formpost data
macbookpro:~$ curl -F upload=@"my\;file.txt" http://localhost:8080/data/upload
curl: (26) failed creating formpost data
macbookpro:~$ curl -F upload=@"my\\;file.txt" http://localhost:8080/data/upload
curl: (26) failed creating formpost data
macbookpro:~$ 

1 Ответ

7 голосов
/ 18 марта 2012

curl использует ; для отделения типа (или других директив) от фактического имени, поэтому вместо этого я бы просто использовал stdin:

cat 'my;file.txt' | curl -F upload=@- http://localhost:8080/data/upload

Вы можете добавить директиву filename= какхорошо при желании (но без точки с запятой в имени!).

...