A abordagem que eu usaria é pegar a saída de ls, configurar um array mapeando o nome convertido de volta para o nome original e, em seguida, processar cada linha do arquivo de entrada. Se a entrada estiver na matriz, emita o valor da matriz, caso contrário, inclua a linha de entrada no arquivo missing
. Então, algo como colocar isso em um arquivo, altere para o directory
e execute-o com inputfile
como um parâmetro
#!/usr/bin/awk
# set up an array t of translations
BEGIN {
while (("ls" | getline )>0) {
k=$0
gsub(/ /,"_")
if ($0 in t) {
print "$0 matches more than one file" > /dev/stderr
exit(2)
}
t[$0]=k
}
close("ls")
}
{ if ($0 in t) {
print t[$0]
} else {
print $0 > "../missing"
}
}