Tarファイルまたはディレクトリのコンテンツをある程度のレベルまでリストする
質問
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
深さ= 2
tar --exclude="*/*/*" -tf file.tar
私たちが伝えることができればいいでしょう find
タールファイルの中を見るコマンドですが、それが可能であるとは思いません。
たとえば、ディレクトリセパレーターの数を制限することは、迅速かつ醜い(そして困難ではない)方法です。
$ tar tvf myfile.tar | grep -E '^[^/]*(/[^/]*){1,2}$'
2 2つ以下のスラッシュを表示するように指示します(私の場合、1つはユーザー/グループセパレーターによって既に生成されています)、したがって、せいぜい1つの深さでファイルを表示するようにします。 2の代わりにさまざまな数字で試してみたいと思うかもしれません。
別のオプションはです Archivemount. 。あなたはそれをマウントし、それにCD。その後、他のファイルシステムと同様に、何でもできます。
$ archivemount /path/to/files.tgz /path/to/mnt/folder
TARメソッドよりも速く見えます。
私は同意します レオンブロイの答え - ターボール自体の中でこれを簡単に行う方法はありません。
あなたの質問の第2部については、 ls
最大深度オプションはありません。再発することができます すべての と ls -R
, 、しかし、それはしばしばあまり役に立ちません。
ただし、両方でこれを行うことができます find
と tree
. 。たとえば、ファイルとディレクトリを1レベルの深いリストにリストするには、できる
find -maxdepth 2
また
tree -L 2
tree
またあります -d
ディレクトリを再帰的にリストしますが、ファイルではなくオプションがあります。 -L
, 、 一般に。