mover arquivos e pastas para uma subpasta

0

Gostaria de mover todos os arquivos e pasta de um diretório para uma de suas subpastas. Como eu faço isso?

Estou usando o BusyBox e o linux.

ex:

mova todos os arquivos e pastas em /my/path/ para /my/path/subfolder/.

Copie e exclua as soluções que não são acessíveis.

Obrigado.

    
por hebbo 12.04.2018 / 01:03

5 respostas

0

Depois de mais escavação e experimentação. Eu encontrei a resposta: -prune é usado para evitar recusar em subdiretórios. ! -name é usado para excluir o subdiretório de destino e, em seguida, exec executa a operação de movimentação. O {} é substituído por nomes de arquivos / diretórios do comando find .

find /my/path/* -prune ! -name subfolder -exec mv {} /my/path/subfolder/. +
    
por 12.04.2018 / 03:17
1
mv * subfolder 

Naturalmente, ele não conseguirá mover o diretório "subpasta" para si mesmo, mas tudo o resto se moverá

    
por 12.04.2018 / 01:07
1

As soluções que usam * (expandido por shell) não funcionarão com muitos objetos em /my/path/ . Nesse caso, você terá:

argument list too long

Esta abordagem não usa * :

cd /my/path/ &&
find . -mindepth 1 -maxdepth 1 ! -name subfolder -exec mv -t subfolder/ {} +

Infelizmente, as opções -mindepth e -maxdepth de find não são compatíveis com POSIX; Nem -t opção de mv é, eu acho.

Esta variante deve satisfazer o POSIX:

cd /my/path/ &&
find . ! -name . -prune ! -name subfolder -exec mv {} subfolder/ \;

(Eu adaptei esta resposta Unix e Linux SE ). Infelizmente, ele chama mv para cada objeto encontrado, portanto, é lento.

Abordagem alternativa rápida, se você puder criar diretórios novamente (inicialmente não deve existir /my/path/subfolder/ nem /my/subfolder/ ):

  • renomear path/ para subfolder/ ,
  • recriar path/ ,
  • mova subfolder/ para path/ .

Nota sobre o sistema de arquivos baseado em inode, isto deve ser igualmente rápido, não importa quantos objetos existam em path/ . O código:

cd /my/ &&
test ! -e subfolder/ && mv path/ subfolder/ &&
mkdir path/ &&
mv subfolder/ path/

Neste caso eu usei muito && para enfatizar que o procedimento deve ser abortado se algum dos seus passos falhar. No entanto, essa abordagem é inconveniente se você precisar de path/ ou subfolder/ para ter permissões não padrão, propriedade etc.

    
por 12.04.2018 / 06:52
0

Você pode querer verificar o comando mv . Você pode tentar procurar por todos os arquivos e pastas em um diretório e excluir um subdiretório e copiar todos os arquivos encontrados para esse subdiretório usando find com o comando mv .

Veja uma pergunta semelhante sobre estouro de pilha link

    
por 12.04.2018 / 01:23
0

A maneira mais simples de fazer isso é:

mv !(subfolder) subfolder

'!' significa NOT, semelhante a linguagens de programação, em que mv moverá todos os arquivos e pastas para a subpasta necessária, com exceção da subpasta.

Coisas adicionais como mover pastas ocultas e pastas de pontos são descritas aqui: link

    
por 12.04.2018 / 07:02