Você não quer usar ls , você quer usar shell e manipulação de string :
$ for f in *.rej; do
size=$(stat --printf "%s" "${f%.rej}.failed") &&
if [ $(stat --printf "%s" "$f") -eq "$size" ]; then
mv "${f%.rej}.failed" backup/;
fi; done 2>/dev/null
Explicação
O comando stat --printf "%s" imprimirá o tamanho de um arquivo em bytes. ${f%.rej}.failed imprimirá qualquer que seja o nome do arquivo .rej atual, mas com a extensão .failed em vez da .rej . Se esse arquivo existir, então size=$() sairá corretamente e o script continuará ( && ). Portanto, se o $size do arquivo .failed for o mesmo que o tamanho do arquivo .rej , o arquivo .failed será movido para o diretório backup/ .