A substituição do comando '…' substitui a saída do comando na linha de comando, portanto diff vê a lista de arquivos nos dois diretórios como argumentos. O que você deseja é que diff veja dois nomes de arquivos em sua linha de comando e tenha o conteúdo desses arquivos como as listagens de diretório. Isso é o que a substituição de processos faz.
diff <(ls old) <(ls new)
Os argumentos para diff serão parecidos com /dev/fd/3 e /dev/fd/4 : eles são descritores de arquivos correspondentes a dois canais criados por bash. Quando diff abrir esses arquivos, ele será conectado ao lado de leitura de cada canal. O lado de gravação de cada pipe está conectado ao comando ls .