Domanda

Mi chiedo come elencare il contenuto di un file tar solo fino a un certo livello?

Capisco tar tvf mytar.tar elencherà tutti i file, ma a volte mi piacerebbe vedere solo le directory fino a un certo livello.

Allo stesso modo, per il comando ls, come faccio a controllare il livello di sottodirectory che verrà visualizzato? Per impostazione predefinita, mostrerà solo le sottodirectory diretti, ma non andare oltre.

È stato utile?

Soluzione

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

Assicurati di nota, che il numero è 3+ tuttavia molti livelli che si desidera, a causa della / il nome utente / gruppo. Se solo fare

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

è solo due di più.

Si potrebbe probabilmente pipe l'output di ls -R a questo script awk, e hanno lo stesso effetto.

Altri suggerimenti

profondità = 1

tar --exclude="*/*" -tf file.tar


profondità = 2

tar --exclude="*/*/*" -tf file.tar

Sarebbe bello se potessimo dire il comando find di guardare dentro un file tar, ma dubito che sia possibile.

I rapido e brutto (e non infallibile) modo sarebbe quello di limitare il numero di separatori di directory, ad esempio:

 $ tar tvf myfile.tar | grep -E '^[^/]*(/[^/]*){1,2}$'

2 dice di visualizzare non più di 2 barre (nel mio caso uno è già stato generato dal separatore utente / gruppo), e quindi, per visualizzare i file in profondità al massimo uno. Si potrebbe desiderare di provare con numeri diversi al posto del 2.

Un'altra opzione è archivemount . Si monta, e cd in esso. Poi si può fare qualsiasi cosa con essa proprio come con altri file system.

$ archivemount /path/to/files.tgz /path/to/mnt/folder

Sembra più veloce del metodo di catrame.

Sono d'accordo con di leonbloy risposta - non c'è modo di fare questo semplicemente all'interno del tarball sé

.

Per quanto riguarda la seconda parte della tua domanda, ls non ha un'opzione di profondità massima. È possibile recurse tutto con ls -R, ma questo è spesso non è molto utile.

Tuttavia si può fare questo sia con find e tree. Ad esempio, per i file e le directory di elenco un livello profondo, si può fare

find -maxdepth 2

o

tree -L 2

tree ha anche un'opzione -d, che elenca in modo ricorsivo directory, ma non i file, che trovo molto più utile di -L, in generale.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top