コマンドを使用して特定のディレクトリ内のすべてのファイルを圧縮する方法はありますかzip
?の使用について聞いたが、*.*
拡張子のないファイルでも機能したいと思います。
答え1
ただ使用できます*
。必ずしも必要ではありません*.*
。ファイル拡張子はUnixでは特別ではありません。*
ドットを含む0個以上の文字と一致します。したがって、foo.png
0個以上の文字(正確には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