特定のフォルダ内のすべてのファイルを圧縮したいのですが、ディレクトリは圧縮したくありません。これを行う方法を知っていますか?
たとえば、ディレクトリ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
。.,@,p
p
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/\*
役に立ったことを願っています!