tl;博士:如何告诉linux给我所有不匹配的文件* .txt
答案 0 :(得分:4)
$ zip -r zipfile -x'*.txt' folder1 folder2 ...
答案 1 :(得分:0)
移至所需目录并运行:
ls | grep -P '\.(?!txt$)' | zip -@ zipname
这将创建一个zipname.zip
文件,其中包含除.txt
个文件以外的所有文件。简而言之,它的作用是:
-1
选项来实现,但是这里不需要它,因为当输出不是终端时它是默认的,它是一个管道这种情况)。.txt
结尾的所有行中提取。请注意grep
使用Perl正则表达式(选项-P
),因此可以使用负向前瞻。-@
)压缩到zipname
文件。我发布的第一个方法失败,文件包含两个.
,就像我在评论中所描述的那样。出于某种原因,我忘记了grep的-v
选项,它只打印不匹配正则表达式的内容。另外,请继续使用不区分大小写的选项。
ls | grep -vi '\.txt$' | zip -@ zipname
答案 2 :(得分:0)
简单,使用bash的Extended Glob选项,如下所示:
#!/bin/bash
shopt -s extglob
zip -some -options !(*.txt)
这不如-x
的{{1}}内置选项好,但我的解决方案在任何可能没有这个好功能的命令中是通用的。