Você pode fazer:
find . -type f -name '*.ort' -exec mv -i {} outdir \; -exec bash -c 'rmdir "${1%/*}"' _ {} \;
-
find . -type f -name '*.ort' -exec mv -i {} outdir \;
moverá o único arquivo.ort
do diretório de origem para o diretório de destino (outdir
) -
A segunda
-exec
action,-exec bash -c 'rmdir "${1%/*}"' _ {} \;
será executada somente se a ação anterior-exec
for bem-sucedida, ou seja,.ort
arquivo for encontrado e movido com êxito. Você pode colocá-lo em um-exec
também com&&
, mas dois-exec
s são usados para tornar as coisas um pouco mais limpas. -
A segunda ação
-exec
apenas removerá o diretório vazio que contém o arquivo;${1%/*}
é o padrão de expansão do parâmetro bash para obter o nome do diretório,dirname
também funcionaria.
Exemplo:
$ tree
.
├── egg
├── ortdir1
│ └── foo.ort
├── ortdir2
│ └── bar.ort
├── outdir
└── spam
$ find . -type f -name '*.ort' -exec mv -i {} outdir \; -exec bash -c 'rmdir "${1%/*}"' _ {} \;
$ tree
.
├── egg
├── outdir
│ ├── bar.ort
│ └── foo.ort
└── spam