mover arquivos e pastas para uma subpasta

mover arquivos e pastas para uma subpasta

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

Estou usando BusyBox e Linux.

ex:

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

Copiar e depois excluir soluções não são acessíveis.

Obrigado.

Responder1

mv * subfolder 

Obviamente, não será possível mover o diretório "subpasta" para si mesmo, mas todo o resto será movido

Responder2

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

argument list too long

Essa abordagem não usa *:

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

Infelizmente -mindepth, -maxdepthas opções de findnão são compatíveis com POSIX; nenhuma -tdas opções mvé, eu acho.

Esta variante deve satisfazer o POSIX:

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

(eu adapteiesta resposta Unix e Linux SE). Infelizmente, ele exige mvtodos os objetos encontrados, por isso é lento.


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

  • renomear path/para subfolder/,
  • recriar path/,
  • mover- subfolder/se para path/.

Observe que no sistema de arquivos baseado em inode isso deve ser igualmente rápido, não importa quantos objetos existam no arquivo path/. O código:

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

Neste caso usei &&muito para enfatizar que o procedimento deveria ser abortado caso alguma de suas etapas falhasse. No entanto, esta abordagem é inconveniente se você precisar path/ou subfolder/tiver permissões, propriedade, etc. não padrão.

Responder3

A maneira mais simples de fazer isso é:

mv !(subfolder) subfolder

'!' significa NÃO, semelhante às linguagens de programação, onde 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:https://askubuntu.com/questions/91740/how-to-move-all-files-in-current-folder-to-subfolder

Responder4

Você pode querer verificar o mvcomando. Você pode tentar pesquisar todos os arquivos e pastas em um diretório e excluir um subdiretório e depois copiar todos os encontrados para esse subdiretório usando findo mvcomando.

Veja uma pergunta semelhante sobre estouro de pilhahttps://stackoverflow.com/questions/4612157/how-to-use-mv-command-to-move-files-exceto-aqueles-em-um-diretório-específico

informação relacionada