listar todos os arquivos c em sub-diretórios e seu diretório pai

2

Suponha que eu tenha uma árvore de diretórios como segue:

/home/xen/p.c
/home/dan/t.c
/home/jhon/l.c
...
etc (many more users) 

Eu preciso de uma lista separada por vírgulas (nome de usuário, caminho completo para o arquivo c) da seguinte forma:

xen,/home/xen/p.c
dan,/home/dan/t.c
...
etc

Como fazer isso a partir da linha de comando?

    
por tomato 17.04.2015 / 09:46

2 respostas

2

Seria possível formatar a saída usando o GNUfind. Supondo que os arquivos sejam criados pelo próprio usuário, seu comando seria:

find /home/ -maxdepth 2 -type f -name '*.c' -printf '%u,%p\n'

Veja man find para mais detalhes sobre printf

Você também pode usar o seguinte

find /home/ -maxdepth 2 -type f -name '*.c' -exec bash -c 'n="${1%/*}"; n="${n##*/}"; echo "$n",$1' _ {} \;
    
por 17.04.2015 / 09:56
2
for i in /home/*/*.c
do
echo $i|awk 'BEGIN{FS="/"}{print $3, ",", $0;}'
done

Isso pode ajudar.

Ou em um formulário mais curto

 echo /home/*/*.c | awk 'BEGIN{FS="/";RS=" "}{printf "%s,%s\n",$3,$0;}'

onde

  • echo /home/*/*.c expandirá (desde que você tenha o direito), todos os arquivos .c
  • awk
    • BEGIN{FS="/"} usará / como separador de arquivo
    • {printf "%s,%s\n",$0,$3;} e imprimir linha inteira ($ 0) e arquivo ($ 3)
por 17.04.2015 / 10:15

Tags