Na linha de comando, qual é a maneira mais fácil de mostrar o conteúdo de vários arquivos? Meu diretório é exibido abaixo.
./WtCgikkCFHmmuXQXp0FkZjVrnJSU64Jb9WSyZ52b
./xdIwVHnHY7dnuM9zcPDYQGZFdoVORPyMVD2IzjgM
./GZnATXO1e5Hh3Bz1bhgJjjwheIjjZqtnXR0hfOyj
./mWz7ehBNoTZmtDh8JG6sxw2lMJFwIovPzxDGECUY
./JN65F5v3RL2ilHPqNSx9N9D4lvVpqpbJ9lASd8TJ
./At9PS4y4nTiXUO0Z0USnbYkTPBla1msQRpwuruqE
./YiPyMZPCaUDZTiTczAvWII9bJrUqLXCFtH2pXEA2
./JoakdlbRFPwAvWp1d4n8RvMoyMeizCoiriL2Sn2U
./wFPWZUus8Yu7UtESGABLCoqDg36cT90USO0xuyUr
./qseI9PgV1EJfZCDyGGeVytajqG7JeX0r7eA5S1JW
./zgFJpNgXyCsaVh38aCuMGuzHwIbwSNB6rQDdh27x
./.htaccess
Agora eu gostaria de ver o conteúdo de todos os arquivos, exceto .htaccess
. Pode parecer algo como:
WtCgikkCFHmmuXQXp0FkZjVrnJSU64Jb9WSyZ52b:
Contents of file WtCgikkCFHmmuXQXp0FkZjVrnJSU64Jb9WSyZ52b.
xdIwVHnHY7dnuM9zcPDYQGZFdoVORPyMVD2IzjgM:
Contents of file xdIwVHnHY7dnuM9zcPDYQGZFdoVORPyMVD2IzjgM.
[...]
Eu acho que isso deve ser possível com uma combinação de find, xargs e cat, mas ainda não descobri como. Obrigado pelo seu tempo!
command-line
files
Znarkus
fonte
fonte
Respostas:
Os dois comandos padrão
head
etail
imprimem um cabeçalho com o nome do arquivo se você passar a eles mais de um argumento de arquivo. Para imprimir o arquivo inteiro, usetail -n +1
(imprima da primeira linha em diante, ou seja, tudo).Aqui, parece que você deseja ver todos os arquivos, exceto o único cujo nome começa com um ponto. Os arquivos de ponto são "ocultos" no unix: eles não aparecem na saída padrão
ls
ou em uma correspondência curinga. Portanto, a correspondência de todos os arquivos não ocultos é feita com apenas*
.(Estritamente falando,
tail -n +1 -- *
é necessário caso um dos nomes de arquivo comece com a-
.)fonte
--
modificador?--
significar o fim das opções é uma convenção que a maioria dos comandos obedece. Por exemplo,tail -n +1 -- -f -g
diztail
que-f
e-g
são arquivos para ler (operandos) e não opções. É a diretriz 10 na diretriz de sintaxe do utilitário POSIX (um documento destinado a escritores de utilitários). Não tenho uma sugestão de leitura destinada a usuários finais, espero que um bom tutorial do unix cubra-a em algum momento.find
, mas, em seguida, usar algum exec com impressão formatação: Uma maneira simples de usarfind
etail
é:find . -type f -print0 -name "*" | xargs -0 tail -n +1 --
(-print0
exargs -0
ea--
garantir que o comando também funciona com nomes de arquivos com espaços ou começando com -)Você pode fazer tudo em um com
find
:Isso indica
find
para encontrar todos os arquivos (-type f
) no diretório atual (.
), exceto (-not
) um chamado.htaccess
(-name .htaccess
). Em seguida, imprime (-printf
) uma nova linha seguida pelo nome do arquivo (%p
) e depois executacat
no arquivo (-exec cat {} \;
). Isso lhe dará uma saída como:Se você fizer isso com frequência, pode valer a pena colá-lo em um shell script ou em uma função; Eu tenho um nome
cats
que faz exatamente isso:Ele faz um loop sobre cada argumento do nome do arquivo, imprime o nome do arquivo (em verde negrito) e depois cria o arquivo:
Então o comando seria apenas:
fonte
Para mostrar o conteúdo de todos os arquivos na pasta atual, tente:
e similar, mas recursivamente:
O formato seria:
filename: content
.Para ter um formato semelhante ao sugerido, seria:
Notas laterais:
\x00
) nos exemplos acima impede a exibição de arquivos binários (o que-I
realmente está ocorrendo, mas ainda precisamos usar algum padrão).*
), ele ignora automaticamente arquivos ocultos, como.htaccess
.Veja também: grep: exibe o nome do arquivo uma vez e exibe o contexto com os números de linha no Unix SE
fonte
grep -r ^
é o suficiente.Você pode usar isto:
fonte
Se você deseja ajustar e não perder muito tempo com tubos, encontre e tudo (embora seja a cadeia de ferramentas mais poderosa que você já tenha encontrado)
tente usar um loop for, cat, etc.
fonte
Se você também quiser imprimir, use recursivamente (para arquivos com extensão .sql, por exemplo):
fonte