Mover todos os arquivos em um diretório em um subdiretório

2

Não consigo encontrar uma solução rápida para este problema simples: tenho esta árvore:

fatherDir
   -File1.txt
   -SomeFile.txt
    ...
   - A name.txt
   -sonDir

Eu quero mover todos os arquivos em fatherDir dentro de fatherDir / SonDir.

mv * sonDir

Como o sonDir está dentro do fatherDir, recebo um erro.

Como conseguir isso?

    
por Federico Ponzi 24.04.2014 / 17:25

3 respostas

2

Para localizar todos os arquivos em fatherDir em vez de usar * (que também lhe dá o sonDir )

find fatherDir -type f -maxdepth 1 -exec mv {} fatherDir/sonDir \+

O {} será substituído por cada nome de arquivo encontrado e todos serão movidos para o diretório de destino.

    
por 24.04.2014 / 17:37
1

Uma abordagem poderia ser usar grep em combinação com xargs:

ls -A | egrep -v sonDir | xargs -i mv {} sonDir
  • primeiro liste todos os arquivos e pastas no diretório atual (ou seja, fatherDir) com ls
  • lembre-se de ler também arquivos ocultos com o -A flag
  • egrep -v permite que você exclua sonDir da saída impressa
  • crie a linha de comando a partir da entrada padrão com xargs e substitua {} pelo nome do arquivo. A opção -i é necessária aqui!

É isso! Eu uso essa abordagem com bastante frequência, pois permite que você exclua não apenas uma pasta, mas pastas e arquivos diferentes ao mesmo tempo. Caso você queira excluir, por exemplo sonDir daughterDir e nephew.file você pode fazer isso simplesmente especificando egrep -v '(sonDir|daughterDir|nephew.file)' , o resto do comando mostrado acima permanece o mesmo ... e há muitas variações!

    
por 24.04.2014 / 18:26
-1

Isso importa? O movimento ainda acontece. O que você recebe é mais um aviso. Você pode redirecionar o stderr para / dev / null. Além disso, se ainda incomoda você, use find como explicado por slhck ou algo assim:

mv 'ls * | grep -v sonDir' sonDir
    
por 24.04.2014 / 18:19

Tags