フォルダ内のすべてのファイルを圧縮しますが、すべてのサブフォルダは除外します。

フォルダ内のすべてのファイルを圧縮しますが、すべてのサブフォルダは除外します。

特定のフォルダ内のすべてのファイルを圧縮したいのですが、ディレクトリは圧縮したくありません。これを行う方法を知っていますか?

たとえば、ディレクトリXファイルを含めるF1そしてF2とディレクトリD1そしてD2
ディレクトリを圧縮する方法X唯一の所有F1そしてF2まさかD1そしてD2

答え1

この問題を解決する 1 つの方法は、zip除外オプションを使用することです。

zip /path/to/zip/file.zip /path/to/given/folder/* -x /path/to/given/folder/*/

これはzip/path/to/given/folderのすべてのエントリをアーカイブするように指示しますが、そのフォルダ(ディレクトリ)のすべてのエントリも除外します。以下は、ワイルドカードで操作を実行するシェルです。スラッシュで終わるワイルドカードをそのフォルダのディレクトリリストに展開します。そのディレクトリにドットファイルがある場合は、そのファイルを個別に拡張し、「ドットディレクトリ」も除外する必要があります。

答え2

GNUfindまたは互換バージョンの場合は、改行文字を含むファイル名がないとします。

find X -maxdepth 1 -type f | zip -nw -@ X.zip

この-@オプションは、標準入力から1行に1つずつファイルのリストを取得します。-nw(または)、または文字を含むファイル名に関する問題を回避するには、--no-wildワイルドカード拡張をオフにします。zip*?[

答え3

そしてzsh

zip -nw X.zip X X/*(ND.)

一般ファイルX(. グローバル予選その中に含まれている隠しコンテンツ()をD語彙順に圧縮されたアーカイブに入れます。X.zip

.どちらを選ぶよりも定期的な^/ファイルのみ、あらゆる種類のファイルを選択するために使用できます。とは別にシンボリックリンク、fifo、デバイス、ソケットを含むディレクトリ。ただし--symlinks、zip形式(Unix形式とは異なります)はシンボリックリンクとfifo(名前付きパイプ)のみを保存でき--fifoますzip.,@,pp

zip --symlinks --fifo -nw X.zip X/*(ND.,@,p)

答え4

圧縮時に特定のサブフォルダをエスケープするには、*バックスラッシュ(\)を使用してエスケープする必要があり、シェルはそれを(ファイルリストに展開するのではなく)リテラル文字として扱うことができます。以下は次のとおりです。

zip /path/to/zip/file.zip /path/to/given/folder/* -x /path/to/given/folder/subfolder/\*

役に立ったことを願っています!

関連情報