Quero ver o conteúdo (lista de arquivos e pastas) de um arquivo, por exemplo, um tar.gz
arquivo sem extraí- lo.
Existem métodos para fazer isso?
Quero ver o conteúdo (lista de arquivos e pastas) de um arquivo, por exemplo, um tar.gz
arquivo sem extraí- lo.
Existem métodos para fazer isso?
Respostas:
Execute o comando abaixo no terminal para ver o conteúdo de um arquivo tar.gz sem extraí-lo:
tar -tf filename.tar.gz
-t, --list
Lista o conteúdo de um arquivo. Os argumentos são opcionais. Quando fornecidos, eles especificam os nomes dos membros a serem listados.
tar -tvf xxx.tgz
isso também mostraria propriedades detalhadas dos arquivos.
tree
ver uma exibição de árvoretar -tf filename.tar.gz | tree
unzip -l
/unrar -l
Você também pode usar o vim
vim filename.tar.gz
ex +%p foo.tar.gz
.
vim file.tar.gz
), ele diz "Selecione um arquivo com o cursor e pressione ENTER". Você faz exatamente isso, mova o cursor sobre um arquivo e pressione ENTER.
less
também pode abrir arquivos gz
compactados e descompactados tar
. Também oferece uma ls -l
saída de estilo adorável :
$ less ~/src/compiz_0.9.7.8-0ubuntu1.6.debian.tar.gz
drwxrwxr-x 0/0 0 2012-09-21 11:41 debian/
drwxrwxr-x 0/0 0 2012-08-09 13:32 debian/source/
-rw-rw-r-- 0/0 12 2012-08-09 13:32 debian/source/format
-rw-rw-r-- 0/0 25 2012-08-09 13:32 debian/libdecoration0-dev.docs
-rw-rw-r-- 0/0 25 2012-08-09 13:32 debian/compiz-dev.docs
-rw-rw-r-- 0/0 347 2012-08-09 13:32 debian/compiz-core.install
-rw-rw-r-- 0/0 125 2012-08-09 13:32 debian/libdecoration0-dev.install
...
E como é less
, você pode rolar, pesquisar, etc. No entanto, falha miseravelmente com outros algoritmos de compactação (na minha experiência).
alias
opções especiais para o less
que não está sendo exibido aqui? Eu apenas tentei ver isso, mas não funcionou. Não tenho aliases configurados para less
.
tar
A -t
bandeira de listará o conteúdo para você. Adicione isso aos seus outros sinalizadores ( -tvfz
para a tar.gz
, -tvfj
para a tar.bz2
, etc) e você poderá navegar sem extrair. De lá, você pode extrair arquivos únicos com bastante facilidade
tar -xvfz mybackup.tar.gz path/to/file
O grande problema tar
é lembrar todas as outras bandeiras . Por isso, costumo confiar em 7z
(do p7zip-full
pacote) para fazer todo o meu arquivamento. Não vou afirmar que é totalmente melhor, mas suporta quase tudo (sem precisar especificar o tipo de compactação) e os argumentos são lógicos.
7z l archive.ext
7z e archive.ext path/to/file
É certamente menos capaz, mas você não precisa da página de manual para usá-lo.
Há também Midnight Commander ( mc
). Este é um assunto geral para gerenciamento de arquivos quase gráfico baseado em terminal e, com alguns testes leves, permite navegar nos arquivos .tar.gz
e nos .7z
arquivos. Não tenho certeza de quantos outros ele suporta.
Bem, isso depende do arquivo. A maioria dos programas de (des) compactação possui um sinalizador que lista o conteúdo de um arquivo.
tar
/ tar.gz
/ tgz
/ tar.xz
/ tar.bz2
/ tbz
arquivos
$ tar tf foo.tgz
dir1/
dir1/subdir1/
dir1/subdir1/file
dir1/subdir2/
dir1/subdir2/file
dir2/
zip
arquivos
$ zip -sf foo.zip
Archive contains:
dir1/
dir2/
dir1/subdir1/
dir1/subdir1/file
dir1/subdir2/
dir1/subdir2/file
Total 6 entries (0 bytes)
7zip
arquivos
$ 7z l foo.7z
7-Zip [64] 9.20 Copyright (c) 1999-2010 Igor Pavlov 2010-11-18
p7zip Version 9.20 (locale=en_US.utf8,Utf16=on,HugeFiles=on,4 CPUs)
Listing archive: foo.7z
--
Path = foo.7z
Type = 7z
Solid = -
Blocks = 0
Physical Size = 168
Headers Size = 168
Date Time Attr Size Compressed Name
------------------- ----- ------------ ------------ ------------------------
2015-03-30 19:00:07 ....A 0 0 dir1/subdir1/file
2015-03-30 19:00:07 ....A 0 0 dir1/subdir2/file
2015-03-30 19:07:32 D.... 0 0 dir2
2015-03-30 19:00:07 D.... 0 0 dir1/subdir2
2015-03-30 19:00:07 D.... 0 0 dir1/subdir1
2015-03-30 19:00:06 D.... 0 0 dir1
------------------- ----- ------------ ------------ ------------------------
0 0 2 files, 4 folders
rar
arquivos
$ rar v foo.rar
RAR 4.20 Copyright (c) 1993-2012 Alexander Roshal 9 Jun 2012
Trial version Type RAR -? for help
Archive foo.rar
Pathname/Comment
Size Packed Ratio Date Time Attr CRC Meth Ver
-------------------------------------------------------------------------------
dir1/subdir1/file
0 8 0% 30-03-15 19:00 -rw-r--r-- 00000000 m3b 2.9
dir1/subdir2/file
0 8 0% 30-03-15 19:00 -rw-r--r-- 00000000 m3b 2.9
dir1/subdir1
0 0 0% 30-03-15 19:00 drwxr-xr-x 00000000 m0 2.0
dir1/subdir2
0 0 0% 30-03-15 19:00 drwxr-xr-x 00000000 m0 2.0
dir1
0 0 0% 30-03-15 19:00 drwxr-xr-x 00000000 m0 2.0
dir2
0 0 0% 30-03-15 19:07 drwxr-xr-x 00000000 m0 2.0
-------------------------------------------------------------------------------
6 0 16 0%
Esses são os formatos de arquivo mais populares. Com tudo isso em mente, você pode escrever um pequeno script que usa o comando apropriado, dependendo da extensão do arquivo que você atribui a ele:
#!/usr/bin/env bash
for file in "$@"
do
printf "\n-----\nArchive '%s'\n-----\n" "$file"
## Get the file's extension
ext=${file##*.}
## Special case for compressed tar files. They sometimes
## have extensions like tar.bz2 or tar.gz etc.
[[ "$(basename "$file" ."$ext")" =~ \.tar$ ]] && ext="tgz"
case $ext in
7z)
type 7z >/dev/null 2>&1 && 7z l "$file" ||
echo "ERROR: no 7z program installed"
;;
tar|tbz|tgz)
type tar >/dev/null 2>&1 && tar tf "$file"||
echo "ERROR: no tar program installed"
;;
rar)
type rar >/dev/null 2>&1 && rar v "$file"||
echo "ERROR: no rar program installed"
;;
zip)
type zip >/dev/null 2>&1 && zip -sf "$file"||
echo "ERROR: no zip program installed"
;;
*)
echo "Unknown extension: '$ext', skipping..."
;;
esac
done
Salve esse script no seu PATH
e torne-o executável. Você pode listar o conteúdo de qualquer arquivo:
$ list_archive.sh foo.rar foo.tar.bz foo.tar.gz foo.tbz foo.zip
-----
Archive 'foo.rar'
-----
RAR 4.20 Copyright (c) 1993-2012 Alexander Roshal 9 Jun 2012
Trial version Type RAR -? for help
Archive foo.rar
Pathname/Comment
Size Packed Ratio Date Time Attr CRC Meth Ver
-------------------------------------------------------------------------------
dir1/subdir1/file
0 8 0% 30-03-15 19:00 -rw-r--r-- 00000000 m3b 2.9
dir1/file
0 8 0% 30-03-15 19:29 -rw-r--r-- 00000000 m3b 2.9
dir1/subdir1
0 0 0% 30-03-15 19:00 drwxr-xr-x 00000000 m0 2.0
dir1
0 0 0% 30-03-15 19:29 drwxr-xr-x 00000000 m0 2.0
dir2
0 0 0% 30-03-15 19:07 drwxr-xr-x 00000000 m0 2.0
-------------------------------------------------------------------------------
5 0 16 0%
-----
Archive 'foo.tar.bz'
-----
dir1/
dir1/subdir1/
dir1/subdir1/file
dir1/file
dir2/
-----
Archive 'foo.tar.gz'
-----
dir1/
dir1/subdir1/
dir1/subdir1/file
dir1/file
dir2/
-----
Archive 'foo.tbz'
-----
dir1/
dir1/subdir1/
dir1/subdir1/file
dir1/file
dir2/
-----
Archive 'foo.zip'
-----
Archive contains:
dir1/
dir1/subdir1/
dir1/subdir1/file
dir1/file
dir2/
Total 5 entries (0 bytes)
E como alguém mencionou esse editor menor, naturalmente, o emacs também pode fazer isso:
Por que não usar vim
para procurar seu arquivo morto e abrir arquivos (pelo menos arquivos semelhantes a texto):
vim archive.tar.gz
Pressione as teclas de seta para rolar e Enterabrir um arquivo.
O Midnight Commander ( mc
) também possui um bom visualizador de arquivos compactados, embora eu considere isso meio trapaceiro, já que o mc é um gerenciador de arquivos, embora seja baseado em texto.
Além disso, se tudo o que você deseja é ver o que há dentro dos arquivos compactados, você pode aprender o comando "view" para cada compressor. tar tzvf
mostrará o conteúdo de um arquivo tar, unzip -l
fará isso para um arquivo zip e assim por diante.
lesspipe
é um script de shell instalado por padrão como parte do less
pacote que pode listar o conteúdo de um tar.gz
arquivo morto, além de vários outros formatos comuns de arquivo morto.
$ lesspipe example.tar.gz
drwxrwxr-x ubuntu/ubuntu 0 2018-11-16 05:32 example/
-rw-rw-r-- ubuntu/ubuntu 7 2018-11-16 05:32 example/ask.txt
-rw-rw-r-- ubuntu/ubuntu 7 2018-11-16 05:32 example/ubuntu.txt
É chamado pelo less
comando ( consulte a resposta de Oli ) como um pré-processador de entrada se a $LESSOPEN
variável de ambiente estiver configurada adequadamente.
Se estiver se aventurando, dê uma olhada em vi /usr/bin/lesspipe
quais comandos ele usa. Para arquivos que correspondem à tar.gz
extensão, podemos ver que ele é usado tar tzvf
sob o capô, juntamente com a --force-local
opção de desativar um recurso obscuro tar
que, de outra forma, confundir dois pontos no nome do arquivo com um comando para usar uma unidade de fita remota:
*.tar.gz|*.tgz|*.tar.z|*.tar.dz)
tar tzvf "$1" --force-local
Observe que, como foi desenvolvido principalmente como pré-processador less
, não produzirá nada se não reconhecer o tipo de arquivo. Notei que alguns .tar.gz
arquivos que baixei não funcionavam porque na verdade não usavam a compactação gzip, apesar do nome do arquivo.
Se você deseja visualizar o conteúdo de um arquivo específico dentro de um archive sem extrair o archive ou gravar no disco de qualquer forma, use o sinalizador -O (capital o) para gravar no stdout em vez de em um arquivo.
tar -Oxvf gerald.tar.gz /path/to/sandra.txt | less
Verifique se o O vem antes do f ou ele tenta analisar o O como um nome de arquivo.