![複数のフォルダを再帰的に、または非再帰的にtarで圧縮する方法](https://rvso.com/image/1597819/%E8%A4%87%E6%95%B0%E3%81%AE%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E3%82%92%E5%86%8D%E5%B8%B0%E7%9A%84%E3%81%AB%E3%80%81%E3%81%BE%E3%81%9F%E3%81%AF%E9%9D%9E%E5%86%8D%E5%B8%B0%E7%9A%84%E3%81%ABtar%E3%81%A7%E5%9C%A7%E7%B8%AE%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95.png)
ディレクトリのリストがあります。ディレクトリの中には、再帰的に 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.tar
f
- 私たちのスイッチへの実際の議論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
単一のファイル ( )に追加します。file1
dir3
最後に、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
$