Как скопировать файл с именем "+" и переименовать его?
У меня есть файл с именем +13x18_DSC_0800.JPG на сервере Linux (пожалуйста, не спрашивайте меня, как он туда попал, так как я понятия не имею, как он туда попал). Я хочу переименовать его в 13x18_DSC_0800.JPG. Однако я не смог. Когда я пытаюсь скопировать это, я получаю;
# cp \+13x18_DSC_0800.JPG asd.JPG
cp: cannot stat `+13x18_DSC_0800.JPG': No such file or directory
Вот еще немного информации;
#ll
-rwxrwxrwx 1 ftpuser renko 2798985 2011-10-14 01:12 +13x18_DSC_0800.JPG*
Я действительно не знаю, что не так, кроме того, что знак плюс убивает какой-то сценарий. Еще немного информации;
#uname -a
Linux server-1 2.6.38-8-server #42-Ubuntu SMP Mon Apr 11 03:49:04 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux
Любая помощь будет потрясающей...
4 ответа
Часто это означает, что в имени файла есть некоторые непечатаемые символы, которые вы не видите, потому что они не печатаются.
Пытаться ls -la > /tmp/foo
затем vi -b /tmp/foo
посмотреть на весь текст.
Если это так, то проще всего справиться с ним с помощью glob, попробуйте echo *13x18_DSC_0800*
чтобы проверить, что глобус соответствует этому файлу (и только этому файлу), то вы можете сделать mv *13x18_DSC_0800* newname.jpeg
переименовать его.
Для меня
cp +13x18_DSC_0800.JPG 13x18_DSC_0800.JPG
работал как шарм, без всякого побега.
Глупое и простое решение, если вы хотите избавиться только от одного файла - используйте Midnight Commander:D
но знак + в начале не должен быть проблемой...
$ touch +13x18_DSC_0800.JPG
$ mv +13x18_DSC_0800.JPG test.jpg
$ rm test.jpg
работает для меня...
В принятом ответе используется глобализация, поэтому требуется проверка совпадения только одного файла. Если мы добавим путь, ссылка будет уникальной.
touch +plus.file
touch -minus.file
mv ./+plus.file plus.file
mv ./-minus.file minus.file