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}'
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 .