複数のフォルダを再帰的に、または非再帰的にtarで圧縮する方法

複数のフォルダを再帰的に、または非再帰的にtarで圧縮する方法

ディレクトリのリストがあります。ディレクトリの中には、再帰的に tar を実行する必要があるものもあれば、そのディレクトリ内に存在するファイルのみを必要とし、サブディレクトリは必要としないものもあります。以下のディレクトリ/ファイルを例にすると、tar コマンドは次のようになります。

/tmp/dir1/ - Recursively
/tmp/dir2/ - Only the files that exist in that directory, no subdirectories
/tmp/dir3/file1 - Only this single file.

答え1

私が思いついたのは次の通りです:

まず、例として使用しているディレクトリ構造は次のとおりです。

$ find dir1 dir2 dir3 -print
dir1
dir1/file1
dir1/file2
dir1/sub_dir1
dir1/sub_dir1/file1
dir2
dir2/file1
dir2/file2
dir2/sub_dir1
dir2/sub_dir1/file1
dir3
dir3/file1
$

次に、3 つのコマンドで構成される私のソリューションを示します。

最初のコマンド:

tar cvf archive.tar dir1

かなり標準的です。分解してみましょう:

  • c- 作成する
  • v- 詳細(何が起こっているのか見てみましょう)
  • f- 必要なファイル名(この場合は)archive.tar
  • archive.tarf- 私たちのスイッチへの実際の議論
  • dir1- 私たちが実際にタールで覆おうとしているのは

2番目のコマンド:

find dir2 -maxdepth 1 -type f -print0 | xargs -0 tar rvf archive.tar

詳しく見てみましょう:

  • find dir2- 検索したい場所。
  • -maxdepth 1- 深さ 1 より下には移動しないでください (ルートに留まりますdir2)
  • -type f- ファイルを検索する
  • -print0- 最後に改行文字を出力せず、代わりにヌル文字を使用します。これは、find が空白文字を含むファイルを検出する場合に役立ちます。
  • | xargs -0- findコマンドで見つかった標準入力は、ここで実行され、print0
  • tar rvf- ここでの新しいスイッチは だけですr。これは追加オプションです。archive.tarの末尾に を追加します。A追加のアーカイブを追加するオプション ( .tar-s) と混同しないでください。
  • archive.tar- 追加する tar。

    このコマンドの最後でstdinputが使用されます。例:archive.tar <stdinput>

3番目のコマンド:

tar rvf archive.tar dir3/file1

からarchive.tar単一のファイル ( )に追加します。file1dir3

最後に、tar が作成された後の外観です。tオプションは、その内容を印刷するために使用されます。

$ tar tvf archive.tar
drwxrwxr-x mmallard/mmallard 0 2019-07-18 16:02 dir1/
-rw-rw-r-- mmallard/mmallard 0 2019-07-18 16:01 dir1/file1
-rw-rw-r-- mmallard/mmallard 0 2019-07-18 16:01 dir1/file2
drwxrwxr-x mmallard/mmallard 0 2019-07-18 16:02 dir1/sub_dir1/
-rw-rw-r-- mmallard/mmallard 0 2019-07-18 16:02 dir1/sub_dir1/file1
-rw-rw-r-- mmallard/mmallard 0 2019-07-18 16:02 dir2/file1
-rw-rw-r-- mmallard/mmallard 0 2019-07-18 16:02 dir2/file2
-rw-rw-r-- mmallard/mmallard 0 2019-07-18 16:02 dir3/file1
$

関連情報