重命名文件目录,其中包含基于Shell中CSV的空间

时间:2018-08-30 07:58:35

标签: shell

我需要重命名文件夹中带有空格的文件,例如(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:无效选项-'\'

1 个答案:

答案 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 来进行试运行。然后只执行第一步,而不执行命令。