Mover o conteúdo da pasta para um nível acima

127

Eu tenho um diretório que está descompactado, mas está em uma pasta. Como posso mover o conteúdo para um nível acima? Estou acessando o CentOS via SSH.

Caleb
fonte

Respostas:

189

Com a pasta chamada 'myfolder' e subindo um nível na hierarquia de arquivos (o ponto que você deseja colocar) o comando seria:

mv myfolder/* .

Por exemplo, se os dados estavam /home/myuser/myfolderlá, /home/myuser/execute o comando

Rudu
fonte
35
Pode ser necessário também corresponder .*não apenas *se o arquivo continha arquivos de ponto. Adicione também `&& rmdir myfolder` ao final para remover a pasta agora estranha. Isso é salvo porque será executado apenas se o mv retornar com êxito E porque o rmdir não removerá um diretório não vazio.
Caleb
Bom ponto sobre o .*. A remoção da pasta original é trivial e não solicitada; portanto, vamos deixar o OP lidar com isso.
Rudu
11
@ Caleb é possível escrever ambos *e .*em uma linha? apenas curiosidade
Richard
2
@ Richard Sim, é. Todos os argumentos para mvserão fontes, exceto o argumento LAST, que precisa ser o destino para a movimentação (e, no caso de várias fontes, precisa ser uma pasta).
Caleb
11
Estou recebendo bash:/bin/mv: Argument list too long
dragosrsupercool
26

Apenas para deixar claro, tirado da resposta de Rudu acima e dos comentários.

Se você precisar mover todo o conteúdo, INCLUINDO arquivos que começam com a. (como .htaccess, .git, etc), você precisa incluir * e. * em seu comando. Igual a:

 mv subfolder/* subfolder/.* .

Isso moverá o conteúdo da subpasta para a pasta atual. Observe o espaço antes do último ".".

Richard
fonte
funciona, mas eu recebo mv: rename fake/. to ./.: Invalid argumentemv: rename fake/.. to ./..: Invalid argument
Maslow
16

Isso é possível com os seguintes métodos:

  • Usando rsync:

    rsync -vua --delete-after foo/ .
  • Usando cpe rmdir:

    cp -vaR foo/. . && rmdir foo/
  • Usando mv(com a dotglobopção ativada):

    shopt -s dotglob # Includes filenames beginning with a dot.
    mv -- foo/* .    # Where foo/ is the folder consisting the files.
    shopt -u dotglob # Disables previously enabled dotglob option.

    onde foo/está sua pasta cujo conteúdo deve ser movido um nível acima.

    Veja: help shopte man bash.

  • Usando mv(como sugerido aqui ):

    mv foo/* foo/.[^.]* . && rmdir foo/

    Nota: Faltaria um arquivo chamado foo/..bar...

    Nota: Para shells POSIX, você precisa [!.].

kenorb
fonte
Quais são os interruptores rsync -v, -u, -ae -rfazendo? AFAICT, -vé detalhado, o que apenas faz com que o rsync imprima mais informações. -usignifica atualização - apenas copie um arquivo se for mais novo. Isso não parece relevante. -asignifica arquivo. Isso copiará o proprietário e as permissões do arquivo e tornará a sincronização recursiva. -rsignifica recursivo, mas isso já está coberto -a.
Rjmunro
-ué útil quando você não deseja gastar tempo extra movendo dados que já existem (especialmente para dispositivos de armazenamento lento). Eu removi -r, já que é coberto -acomo você mencionou.
Kenorb 07/02
11
mv foo/* foo/.[^.]* .perderia um arquivo chamado, foo/..bar..por exemplo. Observe que, para shells POSIX, você precisa [!.].
Stéphane Chazelas
Deve-se mencionar que rsync -vua --delete-after foo/ .exclui tudo o que já existe no diretório atual.
David David
7

basta emitir um comando mv

mv (directory)/* .

Se você deseja excluir o diretório, adicione

rm -rf (directory)

Supondo que você esteja em um diretório pai de (diretório)

Se você estiver dentro do (diretório), então

mv * ../
Ranjith Siji
fonte
13
Dica adicional de segurança: ao excluir um diretório que você sabe que deveria estar vazio, rmdirreclama e sai se o diretório não estiver vazio, enquanto ao rm -rinvés disso apenas o teria excluído e todo o seu conteúdo. (É um poka-jugo .)
Anko
Ótimo ponto! Não consigo pensar em uma razão para não fazer dessa maneira.
precisa
@MarkLalor Um motivo pode ser a presença de arquivos ocultos, como os onipresentes .DS_storeno macOS. O mvcomando acima não os moverá (sem dotglobconjunto).
precisa saber é o seguinte
0

para aqueles de vocês em um servidor compartilhado, você teria que usar algo assim

Para mover os arquivos

mv -v ~/public_html/public_html/* ~/public_html/

Para copiar os arquivos

cp -a ~/public_html/public_html/* ~/public_html/

Ricardo Havoc
fonte
2
A pergunta acima pergunta sobre como mover não copiar conteúdo. Isso duplicaria os arquivos, deixando os originais em uma subpasta. Também ser um servidor "compartilhado" ou não realmente não tem nada a ver com isso.
Caleb
11
sua direita e aqui está a resposta para isso ...
Ricardo Havoc
2
Re sua edição: como isso é diferente da resposta já votada ? E o que um "servidor compartilhado" tem a ver com isso? Por favor edite a explicar esses itens se este vai ser um contributo útil que agrega valor ao que já está aqui.
Caleb
11
Não concordo que o servidor compartilhado não tenha nada a ver com isso. A forma como o "dir" é inserido faz um mundo de diferença ..
Ricardo Havoc
11
cara, por que você está tão bravo? ... uau ... eu estava apenas compartilhando um pouco de conhecimento. Todos nós entendemos de forma diferente e enfrentar diferentes problemas técnicos de forma diferente ... Tenha um bom dia Caleb ..
Ricardo Havoc