Respostas:
O comando
mv !(new) new
deve fazer o truque. Se não funcionar, execute shopt -s extglobprimeiro.
Para também mover arquivos / diretórios ocultos (que começam com um ponto), execute também shopt -s dotglobprimeiro.
Entao, para resumir:
shopt -s extglob dotglob
mv !(new) new
shopt -u dotglob
(é sempre melhor desabilitar dotglobpara evitar surpresas ruins).
!(something)?
devpara o meu local atual, tenho que executar mv !(dev) dev? Eu recebo-bash: !: event not found
setopt extendedglobpara definir o modo glob estendido no zsh. ^é o símbolo de exclusão, o mv ^new newque faria o truque. em seguida, para ver todas as opções definidas em zsh você pode usar setopte para desativar o modo glob estendida você pode fazerunsetopt extendedglob
Encontrei algo parecido com isto, mas é um pouco mais simples de entender, e pode funcionar bem para você também:
ls | grep -v new | xargs mv -t new
Adicionando uma explicação para a solução acima:
Nas páginas do manual:
mv -t
-t, --target-directory=DIRECTORY
move all SOURCE arguments into DIRECTORY
grep -v
-v, --invert-match
Invert the sense of matching, to select non-matching lines.
Explicado pela etapa:
ls listará os arquivos no diretório atualgrep -v new retornará canalizado para que não seja novoxargs mv -t newmoverá os arquivos canalizados para ele grep -vpara o diretório de destinomv: illegal option -- t. Isso é porque eu estou usando zsh?
mv, (o que significa que a sua versão do mv é diferente do que eu estava usando) do que você está usando? Acredito que, quando escrevi esta resposta, estava centosusando a distribuição Linux bash.
mv: illegal option -- tporque o mv do osx não tem uma -topção.
zsh, então provavelmente é o SO então ..? Obrigado por esclarecer!
Ideia simples. Supondo que você está em / myuser , mudar o nome de downloads de novo , criar um novo download diretório, em seguida, mover novo para ele.
mv downloads new # downloads is now called new
mkdir downloads # create new directory downloads
mv new downloads # move new into it.
Se você deseja mover todos os arquivos de uma pasta para uma de suas subpastas, use o seguinte comando:
find /myuser/downloads/ -type d -name 'new' -prune -type f | xargs mv -t /myuser/downloads/new
Ele encontrará todos os arquivos e depois os moverá para sua subpasta.
@ waltinator: adicionado -type d -name 'new' -prunepara impedir a travessia de /myuser/downloads/new.
newe tentei este comando, eu recebo mv: missing file operandeTry 'mv --help' for more information
Você pode tentar esse processo alternativo - permaneça no caminho
/myuser/downloads/
mas, em vez de primeiro criar o /myuser/downloads/new/diretório, crie uma pasta no /myuser/diretório, com o comando mkdir ../new, mova todos os arquivos downloadspara newe finalmente newentre downloads. Você pode fazer isso em uma linha, enquanto estiver no /myuser/downloads/caminho, com o comando:
mkdir ../new && mv * ../new && mv ../new ../downloads
Nesse caso, você não precisa se preocupar com nenhum tipo de "filtragem" de arquivos / pastas, pois newestá no mesmo nível do caminho que downloadsvocê, basta mover tudo downloadspara dentro newe depois fazer o newdownload`.
No entanto, se você já tiver a subpasta newcriada e não quiser criar outra, não se preocupe - basta alterar o mkdircomando no lado esquerdo do primeiro &&no comando mostrado acima para um mvcomando, pressionando newa tecla caminho; em outras palavras, enquanto você ainda estiver em /myuser/downloads/, você pode mudar mkdir ../newpara mv new ... Em seguida, a subpasta new[no caminho /myuser/downloads/new/] é pressionada /myuser/new/, no mesmo nível que /myuser/downloads/, e você pode executar o restante do comando, conforme mostrado acima. Todos juntos, a partir do caminho /myuser/downloads/:
mv new .. && mv * ../new && mv ../new ../downloads
e, como você deseja "mover todos os arquivos e pastas / subpastas da pasta de downloads para a subpasta [ new]", está pronto! Se você quisesse mover apenas arquivos (ou apenas pastas ou [inserir mais movimentos granulares de objetos]), seria necessário usar outros comandos que podem "filtrar" objetos, como grep. Os comandos escritos acima são suficientes para seus propósitos, no entanto.
mv * newentanto, ele lamentará "não pode mudar de novo para novo" ou algo semelhante. Talvezmv -i * newvocê evite substituições.