我很困惑;我需要压缩一个文件夹的内容,其中有多个文件(扩展名 .dat)。我去了shell脚本。
到目前为止,我告诉自己这并不难:我只需要递归读取目录的内容,获取文件名并使用文件本身的名称压缩它。
这是我写的:
for i in *.dat; do zip $i".zip" $i; done
现在,当我尝试它时,我得到了一个奇怪的行为:每个文件都被称为“12/23/2012 data102 test1.dat”;当我运行这一系列命令时;我看到该 zip 而不是识别整个文件名,而是将字符串的每个部分视为单个实体,从而导致整个操作失败。
我告诉自己我做错了什么,而 i 变量是错误的;所以我替换了 echo,而不是 zip 命令(查看哪个是 i 变量的输出);$i 输出是文件的全名,而不是文件的一部分。
在这一点上,我完全不知道发生了什么......如果变量 i 是通过 zip 读取的,它会读取字符串的每一个片段,而不是整个字符串,而如果我使用 echo 来查看该变量的内容它得到正确的输出。
我是否必须以不同的方式将文件名的值传递给 zip?由于它是作为参数传递的变量的内容,我假设字符串是 1 还是其中有空格都没有关系,并且我在手册页中找不到答案(如果那里有)。
任何人都知道我为什么会出现这种行为以及如何解决它?谢谢!