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.

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


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 ".".


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 [!.].


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 * ../

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/


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.