为什么当文件存在时for循环中的zip起作用,而当文件不存在时为什么不起作用?

韦恩·沃纳(Wayne Werner)

我有一个包含几个子目录的目录。一个关于压缩文件的问题,其中包含一个我为满足我的需要而稍作修改的答案。

for i in */; do zip "zips/${i%/}.zip" "$i*.csv"; done

但是,我遇到了一个奇怪的问题。对于第一组文件夹(zips/<name>.zip不存在的文件夹),出现此错误:

zip error: Nothing to do! (zips/2014-10.zip)
        zip warning: name not matched: 2014-11/*.csv

但是,当我只是echozip语句时:

for i in */; do echo zip "zips/${i%/}.zip" "$i*.csv"; done

然后运行echoed命令(zip zips/2014-10.zip 2014-10/*.csv),它可以正常工作并压缩文件夹。然后有趣的是,原始命令的后续运行实际上压缩第一次无法使用的文件夹!

要自己测试此行为:

cd /tmp
mkdir -p 2016-01 2016-02 2016-03 zips
for i in 2*/; do touch "$i"/one.csv; done
for i in 2*/; do touch "$i"/two.csv; done
zip zips/2016-03.zip 2016-03/*.csv
for i in 2*/; do echo zip "zips/${i%/}.zip" "$i*.csv"; done
for i in 2*/; do zip "zips/${i%/}.zip" "$i*.csv"; done

您将看到echo显示以下语句:

zip zips/2016-01.zip 2016-01/*.csv
zip zips/2016-02.zip 2016-02/*.csv
zip zips/2016-03.zip 2016-03/*.csv

但是,实际的zip命令会告诉您:

        zip warning: name not matched: 2016-01/*.csv

zip error: Nothing to do! (zips/2016-01.zip)
        zip warning: name not matched: 2016-02/*.csv

zip error: Nothing to do! (zips/2016-02.zip)
updating: 2016-03/one.csv (stored 0%)
updating: 2016-03/two.csv (stored 0%)

因此,它实际上是使用zip文件.csv所在s更新zip文件,而不是在创建zip文件时更新。并且,如果您复制其中一个zip命令:

$ zip zips/2016-02.zip 2016-02/*.csv
adding: 2016-02/one.csv (stored 0%)
adding: 2016-02/two.csv (stored 0%)

然后重新运行所有内容:

for i in 2*/; do zip "zips/${i%/}.zip" "$i*.csv"; done

您会看到它为2016-02更新2016-03这是我的输出tree

.
├── 2016-01
│   ├── one.csv
│   └── two.csv
├── 2016-02
│   ├── one.csv
│   └── two.csv
├── 2016-03
│   ├── one.csv
│   └── two.csv
└── zips
    ├── 2016-02.zip
    └── 2016-03.zip

另外,(出乎意料的是)这很好用:

zsh -c "$(for i in 2*/; do echo zip "zips/${i%/}.zip" "$i*.csv"; done)"

我在这里做错了什么?(请注意,如果有任何区别,我使用的是zsh而不是bash)

吉格纳卡

通过外壳扩展

周围的引号"$i*.csv"会有所不同。Shell用引号将字符串扩展为“ 2014-11 / *。csv”。该确切文件不存在,并zip报告错误。不带引号的,*也将扩展(通过文件名扩展/“ globbing”),并且得到的zip命令是匹配文件的完整列表,每个文件均作为单独的参数。您可以在for循环内获得第二个行为

for i in */ ; do zip "zips/${i%/}.zip" "$i"*.csv ; done

通过zip扩展

zip也可以自行扩展通配符,但并非在所有情况下都可以。zip手册中

压缩程序可以做的名字是在同一个匹配的zip压缩文件被修改,或在的情况下,-x(排除)或-i(包含)选项,文件列表上进行操作时,通过使用反斜杠或引号告诉外壳程序不要进行名称扩展。

成功创建档案后,原始命令可用于后续尝试,因为zip尝试将通配符与现有档案的内容进行匹配。它们存在于此,并且仍然存在于文件系统上,因此通过进行报告updating:

zip创建存档时处理通配符,请使用-r(递归)选项递归到请求的目录中,并使用-i(包含)将其限制为与模式匹配的文件:

 for i in */ ; do zip -r "zips/${i%/}.zip" "$i" -i '*.csv' ; done

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么当文件存在时for循环中的`zip`起作用,而当文件不存在时为什么不起作用?

来自分类Dev

为什么当文件存在时for循环中的`zip`起作用,而当文件不存在时为什么不起作用?

来自分类Dev

为什么不在循环中时,诺言不起作用?

来自分类Dev

为什么克隆函数不存在时仍在起作用?

来自分类Dev

为什么打开文件时多重处理不起作用?

来自分类Dev

为什么 rewrite_rule 仅在文件夹存在时才起作用?

来自分类Dev

涉及不存在的字段时,Rql`或`不起作用

来自分类Dev

当节点不存在时,xPath前缀不起作用

来自分类Dev

当数据不存在时,Toast 不起作用

来自分类Dev

为什么在-r bash循环中执行'pause -1'gnuplot命令时不起作用

来自分类Dev

为什么写入文件不起作用?

来自分类Dev

为什么 pip 的缓存在使用 sudo 重试时不起作用?

来自分类Dev

为什么#define在for循环中不起作用?

来自分类Dev

为什么接头在此for循环中不起作用?

来自分类Dev

为什么在我的jQuery循环中返回不起作用?

来自分类Dev

为什么JButton.setBounds在for循环中不起作用?

来自分类Dev

为什么在Sympy中的`pprint()`在for循环中不起作用?

来自分类Dev

为什么循环中的if语句不起作用?

来自分类Dev

为什么break()在此循环中不起作用?(但停止是)

来自分类Dev

为什么 strptime() 在我的 for 循环中不起作用?

来自分类Dev

添加文件时,为什么 mercurial 文件集不起作用?

来自分类Dev

为什么{如果存在行则提取它们}不起作用?

来自分类Dev

当标记位于单个文件中时,为什么嵌套指令不起作用?

来自分类Dev

当WCF服务运行批处理文件时,XCopy或MOVE不起作用。为什么?

来自分类Dev

为什么在使用FileReader读取文件内容时setState不起作用?

来自分类Dev

为什么在使用scp时,文件中的stdin不起作用?

来自分类Dev

为什么在使用语义 UI 时外部 CSS 文件不起作用?

来自分类Dev

如果不存在不起作用

来自分类Dev

为什么在尝试删除该文件时显然不存在该文件?

Related 相关文章

  1. 1

    为什么当文件存在时for循环中的`zip`起作用,而当文件不存在时为什么不起作用?

  2. 2

    为什么当文件存在时for循环中的`zip`起作用,而当文件不存在时为什么不起作用?

  3. 3

    为什么不在循环中时,诺言不起作用?

  4. 4

    为什么克隆函数不存在时仍在起作用?

  5. 5

    为什么打开文件时多重处理不起作用?

  6. 6

    为什么 rewrite_rule 仅在文件夹存在时才起作用?

  7. 7

    涉及不存在的字段时,Rql`或`不起作用

  8. 8

    当节点不存在时,xPath前缀不起作用

  9. 9

    当数据不存在时,Toast 不起作用

  10. 10

    为什么在-r bash循环中执行'pause -1'gnuplot命令时不起作用

  11. 11

    为什么写入文件不起作用?

  12. 12

    为什么 pip 的缓存在使用 sudo 重试时不起作用?

  13. 13

    为什么#define在for循环中不起作用?

  14. 14

    为什么接头在此for循环中不起作用?

  15. 15

    为什么在我的jQuery循环中返回不起作用?

  16. 16

    为什么JButton.setBounds在for循环中不起作用?

  17. 17

    为什么在Sympy中的`pprint()`在for循环中不起作用?

  18. 18

    为什么循环中的if语句不起作用?

  19. 19

    为什么break()在此循环中不起作用?(但停止是)

  20. 20

    为什么 strptime() 在我的 for 循环中不起作用?

  21. 21

    添加文件时,为什么 mercurial 文件集不起作用?

  22. 22

    为什么{如果存在行则提取它们}不起作用?

  23. 23

    当标记位于单个文件中时,为什么嵌套指令不起作用?

  24. 24

    当WCF服务运行批处理文件时,XCopy或MOVE不起作用。为什么?

  25. 25

    为什么在使用FileReader读取文件内容时setState不起作用?

  26. 26

    为什么在使用scp时,文件中的stdin不起作用?

  27. 27

    为什么在使用语义 UI 时外部 CSS 文件不起作用?

  28. 28

    如果不存在不起作用

  29. 29

    为什么在尝试删除该文件时显然不存在该文件?

热门标签

归档