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
, -maxdepth
as opções de find
não são compatíveis com POSIX; nenhuma -t
das 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 mv
todos 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/
parasubfolder/
, - recriar
path/
, - mover-
subfolder/
se parapath/
.
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 mv
comando. 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 find
o mv
comando.
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