Mova vários arquivos de vários diretórios para o destino relativo à origem

Mova vários arquivos de vários diretórios para o destino relativo à origem

Tendo a seguinte hierarquia de arquivos:

dir
├── dirA
│   └── snapshot
│       └── subdir1
│           └── file1
└── dirB
    └── snapshot
        └── subdir2
            └── file2

Quero mover arquivos de cada diretório snapshot/subdir para o diretório pai do snapshot em um único comando. Isso seria:

dir
├── dirA
│   └── file1
│   └── snapshot
│       └── subdir1
└── dirB
    └── file2
    └── snapshot
        └── subdir2

Eu tentei mv dir/*/snapshot/*/* ../../, mas como a parte de destino ../../é relativa ao diretório de trabalho, obviamente não funciona.

É possível com comandos bash (já que nunca escrevi uma única linha de script bash)?

Responder1

Com base na observação atenta de @Don_Christ, esta resposta foi editada, salvando assim um subshell:

for i in dir/*/snapshot; do
     mv "$i"/*/* "$i"/..
done

informação relacionada