Não é assim que find funciona. O primeiro argumento é um diretório para pesquisar (ou um único nome de arquivo). Se você deseja fornecer padrões, use -name ou -iname ou -regex ou opções semelhantes. Por exemplo:
find /my/directory/ -name "*txt" -mtime +31 -ls
Eu também alterei -exec ls {} \; para usar a opção -ls de encontrar o que faz a mesma coisa com mais eficiência.
A única maneira de verificar seria executar um ls ou outro find primeiro e isso parece bobagem para evitar uma mensagem de erro completamente inofensiva.
Se desejar, você também pode especificar que está procurando um arquivo normal, sem diretórios, etc., usando -type :
find /my/directory/ -type f -name "*txt" -mtime +31 -ls
Isso localizará todos os arquivos .txt , incluindo aqueles nos subdiretórios de /my/directory , se não for o que você deseja, especifique uma profundidade máxima:
find /my/directory/ -maxdepth 1 -type f -name "*txt" -mtime +31 -ls