ディレクトリ内のすべてのファイルを圧縮しますか?

ディレクトリ内のすべてのファイルを圧縮しますか?

コマンドを使用して特定のディレクトリ内のすべてのファイルを圧縮する方法はありますかzip?の使用について聞いたが、*.*拡張子のないファイルでも機能したいと思います。

答え1

ただ使用できます*。必ずしも必要ではありません*.*。ファイル拡張子はUnixでは特別ではありません。*ドットを含む0個以上の文字と一致します。したがって、foo.png0個以上の文字(正確には7個)なので一致します。

*ドットで始まるファイルはデフォルトで一致しません(また一致しません)*.*。これは一般的にあなたが望むものです。それ以外の場合は、bashでshopt -s dotglob実行する場合(ただし、まだ除外して...。他のシェルにはドットファイルが別々に含まれたり、まったく含まれていません。

あるいは、ディレクトリツリー全体を一度に実行する(再帰)オプションがzipあります-r(ドットファイルについて心配する必要はありません)。

zip -r myfiles.zip mydir

mydirファイルを含むディレクトリはどこにありますか?生成されたzipにはディレクトリ構造とファイルが含まれます。 Peterphが彼の意見で指摘したように、これは一般的に良いと考えられています。 zipを抽出すると、抽出されたすべてのファイルがサブディレクトリにきれいに保存されます。

-j/オプションを使用して、zipにパスを保存しないように指示することもできます--junk-paths

このコマンドには、文書を表示できるzipすべての(多くの)オプションを知らせる文書が付属しています。man zipこれはzipに限定されません。これにより、ほとんどのコマンドのドキュメントを取得できます。

答え2

私の場合は、各ファイルを独自のアーカイブに圧縮したかったので、次のようにしました(からzsh)。

$ for file in *; do zip ${file%.*}.zip $file; done

答え3

もう一つの方法は find と xargs を使うことです。 (zipに「.」ディレクトリを含めることができますが、まだ正しく抽出する必要があります。テストでは、zipは圧縮前にドットを削除します。) find . -type f -exec zip zipfile.zip {} +

(あなたのバージョンがexecの終わりをサポートしていない場合は、+それをそのバージョンに置き換えることができますが、速度は遅くなります...)\;find+

デフォルトでは、これにはすべてのサブディレクトリが含まれます。-maxdepthこれはGNU findで防ぐことができます。

答え4

.zipファイルではなく、ディレクトリgzip *内の各ファイルを独自のファイルに圧縮し.gzて元のファイルを削除する短いコマンドです。他の多くのツールが.gzファイルを直接処理できるため、多くの状況で本当に便利です。

user@computer:~/test$ touch test1.txt
user@computer:~/test$ touch test2.txt
user@computer:~/test$ touch test3.txt
user@computer:~/test$ ls
test1.txt  test2.txt  test3.txt
user@computer:~/test$ gzip *
user@computer:~/test$ ls
test1.txt.gz  test2.txt.gz  test3.txt.gz

関連情報