Como posso usar o comando bash para mover um conjunto de diretórios de um local para outro?

0

Ao usar a linha de comando, posso usar

for i in *txt; do mv "$i" /home/some_user/some_folder/"$i"; done

para mover um grupo de arquivos.

Como posso mover todos os diretórios no diretório atual usando esse mesmo tipo de comando?

    
por MrsAngelD 26.09.2017 / 22:06

2 respostas

1

Você pode adicionar uma condição para verificar se o item é uma pasta.

for i in *; do
  if [ -d "$i" ] ; then
    mv "$i" /home/some_user/some_folder/"$i"
  fi
done
    
por olivierb2 26.09.2017 / 22:12
1

Com a correspondência de padrões do shell “glob”

mv -t /home/some_user/some_folder -- */
  • -t instrui mv a mover todos os objetos listados para o diretório indicado pelo caminho a seguir -t .

  • */ corresponde e é expandido para os nomes de todos os diretórios (não ocultos) no diretório atual. Observe o final / que restringe as correspondências glob aos diretórios! (Se você precisar incluir nomes de arquivos ocultos começando com . , ative a opção dotglob com shopt -s dotglob .)

Com find

find . -minepth 1 -maxdepth 1 -type d -exec mv -t /home/some_user/some_folder -- {} +
  • -mindepth 1 -maxdepth 1 restringe a pesquisa ao conteúdo do diretório fornecido (aqui: . ).

  • -type d restringe as correspondências aos diretórios. Isso inclui diretórios ocultos; para excluí-los use ! -name '.*' .

  • -exec COMMAND [ARGUMENTS...] {} + corre COMMAND com ARGUMENTS... (se houver) e acrescenta os caminhos de todos os arquivos correspondentes.

por David Foerster 27.09.2017 / 09:12