【问题标题】:Cygwin create .tar.gz not working within for loopCygwin 创建 .tar.gz 在 for 循环中不起作用
【发布时间】:2017-10-02 12:15:24
【问题描述】:

我有一系列文件夹,每个文件夹都包含各种子文件夹、文件等。我正在尝试将它们压缩成 .tar.gz

目标文件夹结构例如G:/datastore 及以下要压缩的文件夹简单地命名为 yyyymmdd

目的地将是例如G:/datastore/archive 和文件将毫不奇怪地命名为 yyyymmdd.tar.gz

一次执行一个每日文件夹的长格式命令可以正常工作....

tar -czvf /cygdrive/g/datastore/archive/20160108.tar.gz /cygdrive/g/datastore/20160108

但是尝试使用 for 循环让这个突如其来的压缩数天失败了......

我尝试过的语法;

对于 20160107 20160108 中的一天 ;do tar -czvf /cygdrive/g/datastore/archive/{day}.tar.gz /cygdrive/g/datastore/{day} ;done

我得到的错误是

tar:从成员名称中删除前导 `/' tar:/cygdrive/e/tickstore/datastore/{day}:无法统计:没有这样的文件或目录 tar:由于先前的错误而以失败状态退出

如果我尝试导航,所以我坐在目标目录中并删除文件路径,我会得到一个略有不同但基本相同的错误;

这样的语法;

cd /cygdrive/g/datastore

20160107 20160108 中的一天 ;do tar -czvf /cygdrive/g/datastore/archive/{day}.tar.gz {day} ;done

tar: {day}: 无法统计:没有这样的文件或目录 tar:由于先前的错误而以失败状态退出

【问题讨论】:

  • 我建议 {day} 需要为 ${day} 或 $(day)
  • 该死的。菜鸟错误。感谢拉曼修复它。现在感觉很尴尬......

标签: bash unix cygwin tar


【解决方案1】:

详细说明@Raman Sailopal 在 cmets 中所说的话

您可以使用echo 命令来测试您的变量是否被正确使用,请参阅这些示例,注意在变量day 之前使用美元符号:

使用{day}

$ for day in 20160107 20160108 ;do echo {day} ;done                             

输出:

{day}
{day}

使用${day}:

$ for day in 20160107 20160108 ;do echo ${day} ;done

输出:

20160107
20160108

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-05
    • 2016-01-29
    • 1970-01-01
    • 2017-04-13
    • 2013-12-31
    • 2017-01-14
    • 2011-07-21
    • 2016-02-05
    相关资源
    最近更新 更多