while IFS= read -r file; do
[ -d "$file" ] || printf '%s\n' "$file"
done <input_file
Imprimiria os arquivos que não estão determinados como sendo do tipo diretório (ou link simbólico para o diretório). Ele deixaria todos os outros tipos de arquivos (regular, symlink (exceto para diretórios), sockets, pipes ...) e aqueles para os quais o tipo não pode ser determinado (por exemplo, porque eles não existem ou estão em diretórios que você don não tem permissão de pesquisa para).
Algumas variações dependendo do que você quis dizer por arquivo e diretório ( diretório é um dos muitos tipos de arquivos no Unix):
-
o arquivo existe (depois da resolução do symlink) e não é do tipo diretório :
[ -e "$file" ] && [ ! -d "$file" ] && printf '%s\n' "$file"
-
o arquivo existe e é um arquivo regular (após a resolução do link simbólico):
[ -f "$file" ] && printf '%s\n' "$file"
-
arquivo existe e é um arquivo regular antes da resolução do link simbólico (exclui links simbólicos):
[ -f "$file" ] && [ ! -L "$file" ] && printf '%s\n' "$file"
-
etc.