Como a saída de pode ls -l
ser modificada para separar campos usando guias em vez de espaços? Eu quero colar a saída em uma planilha; o preenchimento com um número variável de espaços dificulta isso. Ilustrar:
drwxr-xr-x 2 root root 4096 26 de setembro 11:43 wpa_supplicant -rw-r ----- 1 discagem raiz 66 set 26 11:43 wvdial.conf drwxr-xr-x 9 root root 4096 8 de outubro 08:21 X11 drwxr-xr-x 12 root root 4096 18 de fev 23:31 xdg drwxr-xr-x 2 root root 4096 31 de janeiro 06:11 xml drwxr-xr-x 2 root root 4096 22 de novembro 07:26 xul-ext -rw-r - r-- 1 raiz raiz 349 13 de janeiro de 2012 zsh_command_not_found
No trecho ls -l /etc
mostrado acima, as linhas 1, 2 e 3 têm um único dígito na coluna 2, enquanto a linha 4 possui dois. Isso significa que o alinhamento é alcançado usando dois espaços para separar as colunas 1 e 2 nas linhas 1-3, mas apenas um espaço na linha 4.
ls
diz , analisar bem sua saída. Esse raramente é o objetivo. Indiscutivelmente, é aqui. Eu acho que o método que você usou é muito bom (qualquer método produzirá resultados indesejados, devido a um conjunto de necessidades)! No entanto, a análise sem dúvidals
pode ser melhor. Considere o caso de um nome de arquivo que realmente tenha um caractere de tabulação.ls -l
substitui a guia por um?
caractere. Seu script preserva o caractere de tabulação, que criará colunas extras se sua saída for interpretada como delimitada por tabulação e usada para criar uma planilha. Isso degrada muito se um nome de arquivo tiver uma nova linha.\n
ou estão\t
em seus nomes. Se o fizerem, analisar a saídals
com comandos bash simples será mais complexo, mas pode ser alcançado. Posso atualizar a resposta, se o OP quiser lidar com esses casos.\n
e\t
em seus nomes.printf "%s\t%s\t%s\t%s\r\n" $mod_month $mod_day $mod_time $file
e para redirecionar a saída do arquivo como./ls_tab.sh > listing.txt
.Experimentar:
Ou, se seus nomes de arquivos tiverem espaços:
fonte
awk
serve. Esperto!$9
não altera o fato de que vocêawk
sempre interpreta espaços como indicando uma quebra entre colunas.$9
captura apenas a primeira palavra nessa posição e, como as outras palavras são consideradas colunas separadas e com números mais altos, elas nunca são impressas.Nem precisamos converter a saída como Delimitado por tabulação. O espaço entre as colunas é bom o suficiente.
Execute seu
ls -l
comando no terminal normalmente e copie o conteúdo que deseja colar em uma planilha.Em seguida, abra seu programa de planilha (o LibreOffice Calc no meu caso) e pressione Ctrl+ Vpara colar o conteúdo da sua área de transferência.
O Assistente para importação de texto seria exibido. Coloque uma marca de seleção ao lado
Space
e pressione Ok. Você pode assistir a visualização no painel inferior.fonte
python é bom para isso:
fonte