Macos 如何将Mac OS中非文本文件的特定目录下的文件归档?

Macos 如何将Mac OS中非文本文件的特定目录下的文件归档?,macos,bash,zip,terminal,archive,Macos,Bash,Zip,Terminal,Archive,嘿,伙计们,我使用了zip命令,但我只想归档除*.txt以外的所有文件。例如,如果两个dir file1,file2;它们都有一些*.txt文件。我只想归档文件1和文件2中的非文本文件 tl;dr:如何告诉linux给我所有与*.txt不匹配的文件移动到您想要的目录并运行: ls | grep -P '\.(?!txt$)' | zip -@ zipname 这将创建一个zipname.zip文件,其中包含除.txt文件以外的所有文件。简而言之,它的作用是: 列出目录中的所有文件,每行一个这可

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


tl;dr:如何告诉linux给我所有与*.txt不匹配的文件移动到您想要的目录并运行:

ls | grep -P '\.(?!txt$)' | zip -@ zipname
这将创建一个zipname.zip文件,其中包含除.txt文件以外的所有文件。简而言之,它的作用是:

列出目录中的所有文件,每行一个这可以通过使用-1选项来实现,但是这里不需要它,因为当输出不是终端时,它是默认值,在这种情况下是管道。 从中提取所有不以.txt结尾的行。请注意,它是使用Perl正则表达式选项-P的grep,因此可以使用负前瞻。 将列表从stdin-@压缩到zipname文件中。 使现代化 我发布的第一个方法在有两个文件的情况下失败,正如我在评论中所描述的。但是出于某种原因,我忘记了grep的-v选项,它只打印与正则表达式不匹配的内容。另外,请继续并包括一个不区分大小写的选项

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

移动到所需目录并运行:

ls | grep -P '\.(?!txt$)' | zip -@ zipname
这将创建一个zipname.zip文件,其中包含除.txt文件以外的所有文件。简而言之,它的作用是:

列出目录中的所有文件,每行一个这可以通过使用-1选项来实现,但是这里不需要它,因为当输出不是终端时,它是默认值,在这种情况下是管道。 从中提取所有不以.txt结尾的行。请注意,它是使用Perl正则表达式选项-P的grep,因此可以使用负前瞻。 将列表从stdin-@压缩到zipname文件中。 使现代化 我发布的第一个方法在有两个文件的情况下失败,正如我在评论中所描述的。但是出于某种原因,我忘记了grep的-v选项,它只打印与正则表达式不匹配的内容。另外,请继续并包括一个不区分大小写的选项

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

简单地说,使用bash的扩展Glob选项,如下所示:

#!/bin/bash

shopt -s extglob

zip -some -options !(*.txt)
编辑
这不如zip的-x内置选项好,但我的解决方案在任何可能没有这一良好功能的命令中都是通用的。

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

#!/bin/bash

shopt -s extglob

zip -some -options !(*.txt)
$ zip -r zipfile -x'*.txt' folder1 folder2 ...
编辑
这不如zip的-x内置选项好,但我的解决方案在任何可能没有此功能的命令中都是通用的。

顺便说一句,正则表达式将匹配text.new.txt等文件。这些将包含在拉链中。如果您有这样的文件,请让我知道如何构建更大的表达式……如果您要使用这种方法,我很惊讶没有人建议find:$find-f型-iname'*.txt'-exec-zip-zipfile{}\;。顺便说一下,正则表达式将匹配text.new.txt等文件。这些将包含在拉链中。如果您有这样的文件,请让我知道如何构建更大的表达式……如果您要使用这种方法,我很惊讶没有人建议find:$find-f型-iname'*.txt'-exec-zip-zipfile{}\;。这是一条路,比我的extglob soln好,因为它是从Zipt到Zipt的。这是一条路,比我的extglob soln好,因为它是从Zipt到Zipt的
$ zip -r zipfile -x'*.txt' folder1 folder2 ...