有人能帮助我理解这个奇怪的问题吗?
我正在尝试重命名一长串文件夹。
我进入父目录并在文本文件中列出了要重命名的所有文件夹:
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 个!
为什么?如何解决/预防?
答案1
在 Linux shell 中\
有一个特殊字符
它告诉 shell 解释器按字面意思处理下一个字符
也就是说,如果要将其\
作为脚本命令的一部分传递,则必须使用它两次。第一个字符\
被 shell 解释为特殊字符,告诉 shell 不要将下一个字符(在本例中为第二个字符)\
视为特殊字符并将其传递下去。
在其他情况下,\
后跟普通字符的 被视为 ,escape sequence
这赋予该组合特殊用途。例如,\n
将指针指向一个新行。
看http://linuxcommand.org/wss0060.php其他示例。
另请参阅http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_03_03.html了解更多解释。
希望这可以帮助