
all_folders
5 つのフォルダーを含むフォルダーがあります:
./all_folders
./all_folders/folder1
./all_folders/folder2
./all_folders/folder3
./all_folders/folder4
./all_folders/folder5
all_folders
これらすべてのフォルダーを 1 つのコマンドで一度に圧縮できますか?ディレクトリに移動してコマンドを実行し、このディレクトリ内の個々のフォルダーを圧縮したいと思います。
期待される出力は
私がする時
ls
のall_folders
場合、ディレクトリは 10 個になります。5 つは圧縮されていないもので、5 つは圧縮されたものです。
答え1
cd
に入力しall_folders
、実行する
for i in folder1 folder2 folder3 folder4 folder5; do tar czf $i.tar.gz $i; done
答え2
何を達成しようとしているのかがやや不明瞭です。ここではサブディレクトリのみを圧縮するというユースケースを実行しています。
まず、ディレクトリのコレクションを含むディレクトリに移動し、次の操作を実行します。
find -maxdepth 1 -type d | {
while read dir; do
if [ ! "x${dir#*/}" = "x." ]; then
tar cJf ${dir#*/}.tar.xz ${dir#*/};
fi;
done
}
これは と併用するとうまく機能しますzsh
。テストするには、echo
の前にを入れてtar
、コマンドが機能するかどうかなどを確認します。
ただし、このようにアーカイブのコレクションを作成することは、通常は望ましくありません。通常は、コレクション全体を圧縮するか、これらのファイルが存在するドライブの透過的な圧縮を使用するか、トランスポート圧縮 (X-DEFLATE
たとえば、HTTP を使用) を使用するかのいずれかが必要になります。
「圧縮されたディレクトリ」ではなく「圧縮されたアーカイブ」が作成されることに注意してください。アーカイブはファイルそのものです。一方、ディレクトリは単なるファイルであるため、これらのものは互換性がありません。iノードデータグラム。