Experimente ls -l | awk '{print }'
.
awk
seleciona colunas, por isso é perfeito para essa tarefa.
Meu objetivo é enganadoramente simples (pelo menos para mim). Desejo retirar a saída de ls -l
ou ls -lh
e selecionar apenas um campo.
Eu estou procurando que isso seja o mais à prova de balas, o que significa que os nomes dos arquivos podem ter um número variável de espaços, nem tudo no campo tem o mesmo tamanho, etc.
Pontos de bônus por ter um script que levará o nome do campo (ou mesmo apenas um número de campo) e, em seguida, retornará o conteúdo do campo.
Eu quero virar
para:
Experimente ls -l | awk '{print }'
.
awk
seleciona colunas, por isso é perfeito para essa tarefa.
Nunca analise ls . Use o GNU find
. Ou se a portabilidade não for importante, stat(1)
.
find . -maxdepth 1 -printf '%Td\n'
Para ler dados que não sejam listas de nomes de arquivos linha a linha e dividir em campos, consulte: BashFAQ / 001
Não há métodos para ler de forma confiável uma lista delimitada por novas linhas de nomes de arquivos que fazem sentido na maioria das circunstâncias.
Você pode buscar a coluna específica no shell como:
ls -al | while read perm bsize user group size month day time file; do echo $day; done
ou awk
como mostrado em @Corey answer , cut -c44-45
também funcionaria após o ajuste (desde ls
tem colunas fixas), ou qualquer outra coisa, mas o problema principal é que não será confiável e à prova de balas (por exemplo, no Unix pode ser , não
, e muda dependendo dos argumentos) portanto, é conveniente para máquinas não é recomendado analisar o comando
ls
.
O melhor é usar diferentes comandos disponíveis, como find
ou stat
, que podem fornecer opções relevantes para formatar a saída conforme necessário. Por exemplo:
$ stat -c "%x %n" *
2016-04-10 04:53:07.000000000 +0100 001.txt
2016-04-10 05:08:42.000000000 +0100 7c1c.txt
Para retornar a coluna de apenas alguns dias de modificações, tente este exemplo:
stat -c "%x" * | while read ymd; do date --date="$ymd" "+%d"; done
Vale a pena notar que o GNU stat
poderia ter opções diferentes para o BSD stat
, por isso ainda não será à prova de bala em diferentes sistemas operacionais.
Tags command-line bash