A/B/C
たとえば、これがあなたのホームディレクトリであるとします。そのディレクトリ内にC
サブディレクトリとファイルがあります。しかし、以下のように自分の名前を持つディレクトリだけを圧縮したいと思います。
c以下のディレクトリがTest1 Test2の場合 - Test1.tar Test2.tarになることを願っています。
これはLinuxシステムにあります。
ベストアンサー1
tar
引数に再帰しないように指示し、find
それを使用して各ディレクトリを引数として提供できます。したがって、次のようになります。
find . -type d -print0 | xargs -0 tar --no-recursion -cf your_tree.tar
名前にスペースやその他の特殊文字が含まれるディレクトリの問題を防ぐため-print0
です。-0
以下の説明が示すように、ディレクトリが多いとコマンドラインが大きくなりすぎて何度もtar
呼び出されます。この場合、以下を使用してパラメータを読み取ることができます--files-from
。
find . -type d -print0 | tar --null --no-recursion --files-from - -cf your_tree.tar
編集する:
上記は、OPが最上位ディレクトリにtarファイルセットが必要であることを明確にする前に作成されました。上記の技術を使用してこれを達成できると思います。たとえば、
$ mkdir -vp tree/a/b/c tree/foo/bar/baz
mkdir: created directory ‘tree’
mkdir: created directory ‘tree/a’
mkdir: created directory ‘tree/a/b’
mkdir: created directory ‘tree/a/b/c’
mkdir: created directory ‘tree/foo’
mkdir: created directory ‘tree/foo/bar’
mkdir: created directory ‘tree/foo/bar/baz’
$ touch tree/foo/an_unwanted_file
$ cd tree
/var/tmp/tree
$ for dir in $(find . -maxdepth 1 -type d); do if [ "$dir" != "." ]; then find "$dir" -type d -print0 | tar --null --no-recursion --files-from - -cvf "${dir}.tar"; fi; done
./a/
./a/b/
./a/b/c/
./foo/
./foo/bar/
./foo/bar/baz/
$ tar tvf foo.tar
drwxr-xr-x andy/andy 0 2018-11-29 12:30 ./foo/
drwxr-xr-x andy/andy 0 2018-11-29 12:30 ./foo/bar/
drwxr-xr-x andy/andy 0 2018-11-29 12:30 ./foo/bar/baz/
$ tree
.
├── a
│ └── b
│ └── c
├── a.tar
├── foo
│ ├── an_unwanted_file
│ └── bar
│ └── baz
└── foo.tar