Como localizar arquivos, imprimir algumas informações padrão sobre esses arquivos, além de imprimir a contagem de caracteres alfabéticos de cada nome de arquivo?

0

Eu quero algo assim:

find "$dir" -type f -printf '%i:<alpha_char_count_of_base_filename>:%d:%p\n'

Em seguida, quero classificar primeiro o número do inode e, em seguida, em alpha_char_count_of_base_filename. Eu acho que tenho parte da solução entendida.

Eu sei que posso obter o alpha_char_count_of_base_filename com este código:

basename "$filename" | tr -cd [:alpha:] | wc -m

No entanto, tentar algo assim (não rir) não funciona:

find "$dir" -type f -printf '%i:$(basename -print | tr -cd [:alpha:] | wc -m):%d:%p\n'

Eu tentei muitas ideias e não tive sorte em uma solução de trabalho. Aqui está outra ideia que tentei:

find "$dir" -type f -printf '%i:%d:%p\n' | awk 'BEGIN{FS=":";OFS=":";} {print $1,system("basename "$3" | tr -cd [:alpha:] | wc -m"),$2,$3"\n";}'

Isso parece estar me aproximando, mas imprime o alpha_char_count_of_base_filename no local errado. Eu também não estou confiante de que seja uma boa forma de programação.

Meu livro de programação shell não me oferece nada que possa me ajudar a encontrar uma solução para essa questão específica. Nem o Google (até agora).

Isso será usado como uma solução para esta questão .

    
por MountainX 29.03.2012 / 20:20

1 resposta

2
find "$dir" -type f -printf '%i:%f:%d:%p\n' | 
awk -F: -v OFS=: '{n=$2; gsub(/[^[:alpha:]]/,"",n); $2=length(n); print}'

hmmm, não precisa da variável temp:

awk -F: -v OFS=: '{gsub(/[^[:alpha:]]/,"",$2); $2=length($2); print}'
    
por 29.03.2012 / 21:26