我需要重命名文件夹中带有空格的文件,例如(Deco / main library / file1.txt)
代码:
while IFS="," read orig new pat
do
mv -v $pat$new $pat$orig
done < new.csv
csv文件:
newname,file1.txt,Deco/main\\\ library/
错误:
mv:无效选项-'\'
答案 0 :(得分:1)
欢迎来到Stackoverflow!
首先:在变量的使用前后使用引号。这意味着,除非在极少数情况下,否则应始终使用"$foo"
而不是$foo
,因为如果使用eval
,则外壳程序应(并将)将变量中的空格解释为单词定界符,很少想要。尤其是在您不希望的情况下。
第二个:您的CSV文件似乎包含反斜杠以引用空格。而且似乎有些额外的步骤增加了引号的级别,因此比现在您得到三个反斜杠和每个原始空间一个空格。如果确实是这种情况(请仔细检查您在问题中所写的内容是否正确,否则我的答案不正确),则需要先取消引用它,然后才能使用它。
使用eval
涉及安全性问题,因此请不要轻易使用它(建议使用while IFS="," read orig new pat
do
eval eval mv -v "$pat$new" "$pat$orig"
done < new.csv
时此免责声明是必要的),但是如果您信任要处理的输入不包含任何内容,那么您可以使用以下代码进行此操作:
eval
使用此方法,在执行mv
命令之前,将评估两个级别的报价(这就是echo
的作用)。
我强烈建议您先在mv
之前添加Path\To\Your\Android\Sdk\platform-tools>adb devices
List of devices attached
emulator-5554 device
emulator-5556 device
来进行试运行。然后只执行第一步,而不执行命令。