如何归档某些目录下不是Mac OS中的文本文件的文件?

时间:2011-03-16 16:41:58

标签: macos bash zip terminal archive

嘿,伙计们,我使用了zip命令,但我只想归档除* .txt之外的所有文件。例如,如果两个目录file1,file2;它们都有一些* .txt文件。我只想归档file1和file2中的非文本文件。

tl;博士:如何告诉linux给我所有不匹配的文件* .txt

3 个答案:

答案 0 :(得分:4)

$ zip -r zipfile -x'*.txt' folder1 folder2 ...

答案 1 :(得分:0)

移至所需目录并运行:

ls | grep -P '\.(?!txt$)' | zip -@ zipname

这将创建一个zipname.zip文件,其中包含除.txt个文件以外的所有文件。简而言之,它的作用是:

  1. 列出目录中的所有文件,每行一个(这可以通过使用-1选项来实现,但是这里不需要它,因为当输出不是终端时它是默认的,它是一个管道这种情况)。
  2. .txt结尾的所有行中提取。请注意grep使用Perl正则表达式(选项-P),因此可以使用负向前瞻。
  3. 将列表从标准输入(-@)压缩到zipname文件。

  4. 更新

    我发布的第一个方法失败,文件包含两个.,就像我在评论中所描述的那样。出于某种原因,我忘记了grep的-v选项,它只打印匹配正则表达式的内容。另外,请继续使用不区分大小写的选项。

    ls | grep -vi '\.txt$' | zip -@ zipname
    

答案 2 :(得分:0)

简单,使用bash的Extended Glob选项,如下所示:

#!/bin/bash

shopt -s extglob

zip -some -options !(*.txt)

修改

这不如-x的{​​{1}}内置选项好,但我的解决方案在任何可能没有这个好功能的命令中是通用的。