mv * pasta (evitando erro 'não pode se mover') [duplicado]

9

Sempre que quero mover milhares de arquivos para uma nova pasta, sempre encontro o mesmo problema.

> mkdir my_folder
> mv * my_folder
mv: cannot move 'my_folder to a subdirectory of itself 'my_folder'

Embora eu ache que o erro acima seja inofensivo ( é? ), pergunto-me se existe uma maneira de evitá-lo.

Caso seja importante, estou interessado em uma solução em zsh ou em uma que funcione bem em vários shells.

    
por Amelio Vazquez-Reina 31.01.2013 / 19:41

3 respostas

13

Em zsh, com a opção extended_glob habilitada, você pode usar ~ para excluir padrões de globs, então você pode usar:

setopt extended_glob
mv -- *~my_folder my_folder

Ou use o operador de negação (ainda com extended_glob ):

mv -- ^my_folder my_folder

Use chaves para evitar digitar o nome do diretório duas vezes:

mv -- {^,}my_folder

No bash (para outros que usam respostas), você pode usar globs estendidos no estilo do Ksh:

# If it's not already enabled
shopt -s extglob
mv -- !(my_folder) my_folder

Você também pode usar essa sintaxe em zsh se habilitar a opção ksh_glob .

    
por 31.01.2013 / 20:10
5

Se houver apenas arquivos regulares separados do novo subdiretório, você poderá usar find:

find . -type f -maxdepth 1 -exec mv {} my_folder \;

A opção -type f encontrará apenas arquivos (não dirs). -maxdepth 1 continuará procurando procurando apenas em . (não retorna para outros diretórios). O -exec … faz sua jogada.

No zsh, você pode abreviar isso para

mv *(.) my_folder

Sim, o erro é inofensivo.

    
por 31.01.2013 / 20:24
0

você pode usar:

mv * my_folder 2>/dev/null
    
por 31.01.2013 / 19:45

Tags