Linuxは複数のサブディレクトリを別々のアーカイブにgzipしますか?


16

サブディレクトリを個別のアーカイブに圧縮するにはどうすればよいですか?

例:

directory
 subdir1
 subdir2

subdir1(.tar).gzとsubdir2(.tar).gzを作成する必要があります

回答:


27

要件を考えると、この小さなスクリプトが最適なオプションのようです。

cd directory
for dir in */
do
  base=$(basename "$dir")
  tar -czf "${base}.tar.gz" "$dir"
done

名前にスペースが含まれるディレクトリを適切に処理します。


このエラーが表示されます:bash:-c:行1:構文エラー:予期しないファイルの終わり
EarthMind 09

@EarthMind:ここでは問題なく動作します。スクリプトが正しくコピーされたかどうかを確認してください。
ジュリアーノ

@EarthMind:じゃあ、元の質問をうまく綴ったかどうかわかりません。これを再度実行して、以前の.tar.gzファイルをそのままにして、新しい.tar.gzファイルを取得しますか?「tmstamp = $(date '+%Y%m%d-%H%M')」を追加して、$ {base}を$ {base}-$ {tmstamp}に変更してみてください。
freiheit

2
@EarthMind:すべてを1行に入れる場合は、tarコマンドの直前にセミコロン(;)があることを確認します。それ以外の場合、baseはシェルの補助変数ではなく、環境変数としてtarに渡されます。
ジュリアーノ

@mwojteraあなたの編集の試みはそれ自身の答えであるはずです

10

これはどう: find * -maxdepth 0 -type d -exec tar czvf {}.tar.gz {} \;

説明:現在のディレクトリ内のすべてのアイテムで検索を実行します。Maxdepth 0は、指定された引数より低い再帰を行いません。(この場合は*、または現在のディレクトリ内のすべてのアイテム)「-type」への「d」引数はディレクトリのみに一致します。次に、execは、一致するものすべてに対してtarを実行します。({}は一致するファイルに置き換えられます)


1
しかし、それでも指定されたパスがファイルではなくディレクトリであるというエラーが表示されます
EarthMind 09

3
だけではgzip形式ではなく、アーカイブディレクトリん
ジュリアーノ

gzipを使用するには、ディレクトリをtarする必要があります。
チャフィンク2009

1
ディレクトリのgzipをそのままではなく、zオプションを指定したtarが必要です。ただし、findの非常に便利な使用法。
freiheit

3
エラー:「検索:パスは式の前になければなりません:;」最初の部分は機能するので、使用しました(ディレクトリのみ): for dir in `find * -maxdepth 0 -type d`; do tar -cvzf ${dir}.tar.gz ${dir}; done
JosephK

4

これにより、blahというディレクトリ内の各ファイルに対してblah.tar.gzというファイルが作成されます。

$ cd directory
$ for dir in `ls`; do tar -cvzf ${dir}.tar.gz ${dir}; done

ディレクトリ内に単なるディレクトリ(つまり、lsもディレクトリ内のすべてを返すようにファイルも)以外のものがある場合は、これを使用します。

$ cd directory
$ for dir in `find . -maxdepth 1 -type d  | grep -v "^\.$" `; do tar -cvzf ${dir}.tar.gz ${dir}; done

grep -vは、findデフォルトでコマンドに表示される現在のディレクトリを除外します。


3
lsとfindの両方は、この方法で使用されるように作られていません。特にlsは、「for」の引数としてファイルリストを生成するのではなく、ユーザーが読み取り可能なリストにファイルを表示することを目的としています。ちょうど使用するfor dir in *
ジュリアーノ

1
私はあなたの最初の提案を試みたが、それは自分の名前にスペースを含むディレクトリで作業をしません
EarthMind

さらに、最初のコマンドは、ディレクトリ内の各ファイルのtarballも作成します。
チャフィンク2009
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.