O sinalizador é descrito na página ls man como
do not list implied entries matching shell PATTERN
Assim que você nomear explicitamente um arquivo ou um padrão correspondente a um arquivo, o arquivo não estará mais implícito, por definição. No seu exemplo, books_tom.csv é explicitamente referenciado por meio do padrão de correspondência *.csv . Com ls --ignore="*tom*" , no entanto, todos os arquivos no diretório estão implícitos, portanto, books_tom.csv não será mais exibido.
Se você tiver o alargado de globbing disponível no seu shell (com o bash você pode ativar com shopt -s extglob ) você pode conseguir o que você deseja criando um padrão que excluirá 'tom'. Por exemplo, ls books_!(tom).csv mostraria books_abby.csv , mas não books_tom.csv .
(É claro, você pode usar outras ferramentas como find , pipe para grep -v , etc ... Estou explicando como fazer isso apenas com ls .)