Aqui está um "one-liner" para fazer, usando os built-ins do shell para manipular os nomes dos arquivos:
find . -name '*.bin' -exec sh -c 'p="${1%/*}"; f="${1##*/}"; echo mv -- "" "$p/${p##*/}-$f"' sh {} \;
Teste-o no diretório de destino e remova o echo
se os resultados parecerem corretos
por exemplo. dado
$ tree .
.
└── ABC
├── aa.bin
├── ABC1
│ ├── aa1.bin
│ └── bb1.bin
├── ABC2
│ ├── aa2.bin
│ └── bb2.bin
├── bb.bin
└── cc.bin
3 directories, 7 files
então
$ find . -name '*.bin' -exec sh -c 'p="${1%/*}"; f="${1##*/}"; echo mv -- "" "$p/${p##*/}-$f"' sh {} \;
mv -- ./ABC/ABC2/bb2.bin ./ABC/ABC2/ABC2-bb2.bin
mv -- ./ABC/ABC2/aa2.bin ./ABC/ABC2/ABC2-aa2.bin
mv -- ./ABC/aa.bin ./ABC/ABC-aa.bin
mv -- ./ABC/bb.bin ./ABC/ABC-bb.bin
mv -- ./ABC/ABC1/bb1.bin ./ABC/ABC1/ABC1-bb1.bin
mv -- ./ABC/ABC1/aa1.bin ./ABC/ABC1/ABC1-aa1.bin
mv -- ./ABC/cc.bin ./ABC/ABC-cc.bin
parece ser bom, remova o echo
e execute-o novamente
$ find . -name '*.bin' -exec sh -c 'p="${1%/*}"; f="${1##*/}"; mv -- "" "$p/${p##*/}-$f"' sh {} \;
dando
$ tree .
.
└── ABC
├── ABC1
│ ├── ABC1-aa1.bin
│ └── ABC1-bb1.bin
├── ABC2
│ ├── ABC2-aa2.bin
│ └── ABC2-bb2.bin
├── ABC-aa.bin
├── ABC-bb.bin
└── ABC-cc.bin
3 directories, 7 files