Como mover pastas para a pasta pai no Linux Ubutnu

0

Eu tenho uma estrutura de pastas com profundidades variadas semelhante à seguinte.

parent/location/businessname/sublocation/hotelname
parent/location/businessname/hotelname

Todas as pastas mais baixas são nomes de hotéis e estou tentando obter esses arquivos em uma função PHP. Deixando isso de lado, o que estou tentando fazer é pegar todas as pastas mais baixas e seus conteúdos em uma única pasta pai, como abaixo.

parent/hotelname

Estou em uma máquina Ubuntu e sou novo na linha de comando, mas não totalmente ignorante. Qualquer ajuda seria apreciada.

    
por Alex Knopp 21.08.2015 / 18:26

1 resposta

0

Supondo que as pastas da maior parte das folhas estejam em businessname/ ou businessname/sublocation , você pode começar com as pastas aninhadas primeiro e depois prosseguir para os hotéis no mesmo nível que sublocation/ :

$ cd /tmp
$ rm -rf parent
$ mkdir -p parent/location/businessname/sublocation/hotelname1 \
           parent/location/businessname/hotelname2

$ for depth in 2 1; do
    find parent/location/businessname -mindepth $depth -type d -print0 \
      | while read -d '' dir; do
          echo "$dir"
          mv "$dir" parent/ \
            && rmdir --ignore-fail-on-non-empty $(dirname "$dir")
        done
  done

$ find parent/
parent/
parent/hotelname2
parent/hotelname1
parent/location

Isso é um pouco hacky, pois tenta remover o diretório sublocation/ repetidamente (para cada hotel nele contido) até que esteja vazio.

Também não lida com colisões de nomes - moverá o primeiro hotel com um nome e deixará outros no lugar.

    
por 21.08.2015 / 21:27