Кто-нибудь может помочь мне понять эту странную проблему?
Я пытался переименовать очень длинный список папок.
Я пошел в родительский каталог и перечислил все папки для переименования в текстовом файле:
find PARENT_FOLDER/ -type d -name *Images > ~/Desktop/directory_listing
Я открыл файл списка в LibreOffice Calc, изменил то, что мне нужно было изменить, использовал «сцепление» "функция создания команды для каждой папки для переименования и т. д.
Когда я вернулся в CLI и вставил свои команды из Calc, mv не может указать, что не может найти папки для переименования. Ну, папки на самом деле существуют, но после дальнейших исследований я обнаружил, что вставленный текст из Calc показывает 1 обратную реакцию на экране, но на самом деле содержит 2! Итак, текст, который я вставляю в bash, выглядит примерно так:
mv Test\ Folder-1-Images TestFolder1
Но что он на самом деле интерпретирует:
mv Test\\ Folder-1-Images TestFolder1
Я подтвердил это с помощью gedit, где моя командная строка в тексте показывает 1 обратную косую черту, но если я скопирую и вставлю ее в поле поиска в gedit, она отобразит 2!
Почему? И как это исправить / предотвратить?
\
специальный символ , Он говорит интерпретатору оболочки рассматривать следующий символ буквально
то есть, если Вы хотите передать \
как часть команды в сценарии, необходимо использовать его дважды. Первое \
интерпретируется как специальный символ оболочкой, которая говорит оболочке не рассматривать следующий символ, в этом случае второе \
не как специальный символ и передавать его.
В других ситуациях \
сопровождаемый обычным символом рассматривается как escape sequence
, который дает комбинации специальное использование. Например, \n
берет указатель на, новая строка.
См. http://linuxcommand.org/wss0060.php для других примеров.
Также см. http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_03_03.html для большего количества объяснений.
Hope это помогает