Como mover arquivos e diretórios para a pasta pai no Linux?

Respostas:

66
encontrar . -maxdepth 1 -exec mv {} .. \;

isso também moverá arquivos ocultos.

Você receberá a mensagem:

mv: não pode mover `. ' para `../. ': dispositivo ou recurso ocupado

quando tenta mover .(diretório atual), mas isso não causa nenhum dano.

John T
fonte
11
Ele também moverá todos os arquivos de todos os subdiretórios para o pai do diretório atual. Eu usaria -maxdepth 1para ter certeza.
27510 Dech
11
Agora ele diz: mv: não pode mover ./scripts' to ../scripts': Diretório não vazio
11
Você deve ter um diretório chamado scripts no diretório pai E no diretório atual. Você precisará renomear este antes de movê-lo.
27510 Dech
11
Funcionou, mas você deixou uma informação muito importante - você deve executá-la no subdiretório. Além disso, isso não excluirá o próprio subdiretório, portanto, você deve fazer backup de um diretório e executar um rmdir no subdiretório.
Crafter
89

Eu vim aqui porque também sou novo nesse assunto. Por alguma razão, o exposto acima não fez o truque para mim. O que eu fiz para mover todos os arquivos de um diretório para o diretório pai foi:

cd to/the/dir
mv * ../
Ben Fransen
fonte
12
Isso não mover arquivo oculto embora
Wavesailor
1 liner:(cd ${ANDROID_NDK_HOME}/android-ndk-r14b/ && mv * ../)
Dawid Drozd
10

Digite isso no shell:

mv *.* ..

Isso move TODOS os arquivos um nível acima.

O personagem *é um curinga. Portanto *.deb, moverá todos os arquivos .deb e Zeitgeist.*moverá Zeitgeist.avi e Zeitgeist.srt uma pasta para cima, pois, é claro, ..indica o diretório pai.

Para mover tudo, incluindo pastas, etc, basta usar em *vez de*.*

Gil
fonte
3
isso não funcionou com os dirs! ou os arquivos ocultos
Funciona com dirs, pelo menos para mim.
Maaartinus
5
Você quer *não *.*incluir diretórios
Chris S
É um bom documentário
BlackBurn027
6

Não pode ser mais simples do que:

mv * ../

Para também mover arquivos ocultos:

mv /path/subfolder/{.,}* /path/ 

mvé um comando para mover arquivos, *significa todos os arquivos e pastas e ../é o caminho para o diretório pai.

William Edwards
fonte
2

No bash, você pode usar o shopt -s dotglob para fazer * corresponder a todos os arquivos e movê-los simplesmente

shopt -s dotglob; mv * ..

Essa não é a melhor solução, pois a configuração é permanente para o shell até você alterá-lo

shopt -u dotglob

mas acho bom saber.

maaartinus
fonte
4
Chamá-lo em um subnível: (shopt -s dotglob && mv * ..). Dessa forma, a opção é apenas local para esse subshell.
Martin Ueding 26/01
Boa resposta - é simples, inclui arquivos ocultos e não causa um erro ao copiar '.' e '..'
Daniel Howard
1

Um método que não causa erros e funciona sempre:

ls -1A . | while read -r file                                                    
do                                                                                  
    mv "./${file}" ..                                                            
done
djhaskin987
fonte
1
find . -maxdepth 2 -type f -exec mv {} .. \;

Usei uma variação acima para mover todos os arquivos das subpastas para o pai.

Eu tinha dados em pastas por ano, mas descobri que, usando metadados, poderia colocá-los todos na mesma pasta, o que tornava mais fácil o gerenciamento.

por exemplo.

/data/2001/file_1
/data/2002/file_2
/data/2003/file_3
Bill Bixby
fonte
0

Supondo que todos os seus arquivos ocultos começam com ponto seguido por uma letra ou um número (o que eles deveriam), você poderia usar

mv * .[A-Za-z0-9]* ..

A .[A-Za-z0-9]*parte é garantir que você não tente se mover .ou ..avançar, o que falharia.

ℝaphink
fonte
0

É simples mover todos os arquivos e pastas para o diretório pai no Linux.

Vá para essa pasta e use este comando:

mv * /the full path

Por exemplo, se seus arquivos e pastas são os seguintes:

/home/abcuser/test/1.txt 
                   2.txt
                   3.jpg
                   4.php
                   1folder
                   2folder

Vá para essa pasta via cd:

cd /home/abcuser/test
mv * /home/abcuser

Todos os seus arquivos e pastas serão movidos para a pasta abcuser (diretório pai).

Abhishek
fonte
2
Obrigado @Gareth, estava prestes a mesma. Abhishek, por favor, não poste links não relacionados. Qual é o sentido disso? Além disso, verifique sua formatação, por favor. Além disso, /the full pathnão funciona no Linux, você precisa escapar de espaços com /the\ full\ path.
slhck #
0

Não há necessidade de alterar diretórios. Basta incluir * no final do caminho:

mv /my/folder/child/* /my/folder/

Acima, apenas move arquivos não ocultos. Para mover apenas arquivos ocultos, use. *

mv /my/folder/child/.* /my/folder/

Acima de dois podem ser combinados em um comando:

mv /my/folder/child/{.,}* /my/folder/

Consulte também: Como mover todos os arquivos, incluindo arquivos ocultos, para o diretório pai via *

Shital Shah
fonte
0
find -type f|while read line; do mv $line ${line##*/}; done
Adler
fonte
Obrigado por contribuir com uma resposta. Embora isso possa trabalhar em cenários simples, tubulações findem while readuma maneira ruim de usar find, e melhores respostas já foram postadas.
Scott
-1

alterne para o subdiretório e execute o seguinte comando para copiar ou mover arquivos.

ex: a é o diretório pai eb é o subdiretório, queremos mover / copiar todos os arquivos de b para a (subdiretório para o diretório pai).

cd b
cp * ..
mv * ..
M Ikram
fonte
Bem-vindo ao Super Usuário! Isso duplica outra resposta e não adiciona novo conteúdo. Não poste uma resposta, a menos que você realmente tenha algo novo para contribuir.
DavidPostill