Tarファイルの内容をあるレベルまでしかリストしないのはどうだろう?
わかります tar tvf mytar.tar
はすべてのファイルを一覧表示しますが、あるレベルまでのディレクトリのみを表示したい場合があります。
同様に、コマンドls
の場合、表示されるサブディレクトリのレベルをどのように制御しますか?デフォルトでは、直接のサブディレクトリのみが表示されますが、それ以上は表示されません。
tar tvf scripts.tar | awk -F/ '{if (NF<4) print }'
drwx------ glens/glens 0 2010-03-17 10:44 scripts/
-rwxr--r-- glens/www-data 1051 2009-07-27 10:42 scripts/my2cnf.pl
-rwxr--r-- glens/www-data 359 2009-08-14 00:01 scripts/Pastebin.sh
-rwxr--r-- glens/www-data 566 2009-07-27 10:42 scripts/critic.pl
-rwxr-xr-x glens/glens 981 2009-12-16 09:39 scripts/wiki_sys.pl
-rwxr-xr-x glens/glens 3072 2009-07-28 10:25 scripts/blacklist_update.pl
-rwxr--r-- glens/www-data 18418 2009-07-27 10:42 scripts/sysinfo.pl
ユーザー名/グループ内の/のため、必要なレベルがいくつでも3+であることに注意してください。ただやるなら
tar tf scripts.tar | awk -F/ '{if (NF<3) print }'
scripts/
scripts/my2cnf.pl
scripts/Pastebin.sh
scripts/critic.pl
scripts/wiki_sys.pl
scripts/blacklist_update.pl
scripts/sysinfo.pl
あと2つだけです。
おそらくls -R
の出力をこのawk
スクリプトにパイプして、同じ効果を得ることができます。
深さ= 1
tar --exclude="*/*" -tf file.tar
depth = 2
tar --exclude="*/*/*" -tf file.tar
find
コマンドにtarファイルの内部を見るように指示できればいいのですが、それが可能かどうかは疑問です。
私は迅速かつい(そして絶対確実ではない)方法は、ディレクトリセパレータの数を制限することです、例えば:
$ tar tvf myfile.tar | grep -E '^[^/]*(/[^/]*){1,2}$'
2は、2つ以下のスラッシュ(私の場合はユーザー/グループセパレーターによって既に生成されている)を表示し、したがって、最大で1つのファイルを表示するように指示します。 2の代わりに別の番号を試してください。
私は leonbloyの答え に同意します-tarball自体の中でこれを直接行う方法はありません。
質問の2番目の部分について、ls
には最大深度オプションがありません。 _ls -R
_を使ってeverythingを再帰できますが、それはあまり有用ではありません。
ただし、find
とtree
の両方でこれを行うことができます。たとえば、ファイルとディレクトリを1レベルの深さでリストするには、次のようにします。
_find -maxdepth 2
_
または
_tree -L 2
_
tree
には_-d
_オプションもあり、これはディレクトリを再帰的にリストしますが、ファイルはリストしません。これは一般的に_-L
_よりもはるかに便利です。
別のオプションは archivemount です。あなたはそれをマウントし、そこにcdします。その後、他のファイルシステムと同じように、それで何でもできます。
$ archivemount /path/to/files.tgz /path/to/mnt/folder
Tarメソッドよりも高速のようです。