Mover pastas apenas com mv

0

Eu tenho uma pasta contendo arquivos e pastas.

folder/file1.jpg
folder/file2.jpg
folder/file3.jpg
folder/subfolder1/file1.txt
folder/subfolder1/file2.txt
folder/subfolder2/file1.txt
folder/subfolder3/
destination/

Eu quero mover todas as pastas (e seu conteúdo) em uma nova pasta, mas não nos arquivos.

Por exemplo.

folder/file1.jpg
folder/file2.jpg
folder/file3.png
destination/subfolder1/file1.txt
destination/subfolder1/file2.txt
destination/subfolder2/file1.txt
destination/subfolder3/

Eu sei que, se eu quisesse selecionar todos os meus arquivos jpeg (por exemplo), eu faria mv folder/*.jpg destination . Mas qual é o comando para selecionar todas as pastas?

    
por cdrom 24.04.2018 / 15:27

3 respostas

6

Para isso, você só precisa incluir um adicional / no final de * assim:

mv folder/*.jpg destination (match only jpg files) 
mv folder/* destination (match anything found)
mv folder/*/ destination  (match only the folders) 

Isso moverá apenas as pastas dentro da "pasta" para o destino, e não os arquivos dentro da "pasta" (observe que os arquivos nas subpastas foram movidos).

    
por 24.04.2018 / 16:36
0

Se as subpastas tiverem nomes uniformes, você poderá usar a resposta da roaima . Se não, você pode usar um simples loop de shell:

mkdir -p destination
for name in folder/*; do
    [ ! -d "$name" ] && continue
    mv "$name" destination
done

Isso faria um loop em todas as entradas de diretório em folder (arquivos e diretórios semelhantes), testaria cada um deles, fosse um diretório ou não, e os moveria se fossem.

Outra possibilidade é usar find :

mkdir -p destination
find folder -mindepth 1 -maxdepth 1 -type d -exec mv {} destination ';'

Isso encontraria todos os nomes de caminho de todos os diretórios em folder (mas não abaixo, e não o diretório folder em si), e moveria cada diretório encontrado para destination .

    
por 24.04.2018 / 16:28
0

Dependendo dos nomes dos diretórios reais, você pode usar este

mv folder/subfolder* destination/

Se não houver um padrão ( subfolder* ) para corresponder aos nomes das pastas, você poderá fazer isso

find folder -mindepth 1 -maxdepth 1 -type d -exec mv {} destination/ \;

ou até mesmo isso

find folder -mindepth 1 -maxdepth 1 -type d -exec mv -t destination/ {} +
    
por 24.04.2018 / 16:22

Tags