Respostas:
O comando
mv !(new) new
deve fazer o truque. Se não funcionar, execute shopt -s extglob
primeiro.
Para também mover arquivos / diretórios ocultos (que começam com um ponto), execute também shopt -s dotglob
primeiro.
Entao, para resumir:
shopt -s extglob dotglob
mv !(new) new
shopt -u dotglob
(é sempre melhor desabilitar dotglob
para evitar surpresas ruins).
!(something)
?
dev
para o meu local atual, tenho que executar mv !(dev) dev
? Eu recebo-bash: !: event not found
setopt extendedglob
para definir o modo glob estendido no zsh. ^
é o símbolo de exclusão, o mv ^new new
que faria o truque. em seguida, para ver todas as opções definidas em zsh você pode usar setopt
e 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 new
moverá os arquivos canalizados para ele grep -v
para 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 centos
usando a distribuição Linux bash
.
mv: illegal option -- t
porque o mv do osx não tem uma -t
opçã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' -prune
para impedir a travessia de /myuser/downloads/new
.
new
e tentei este comando, eu recebo mv: missing file operand
eTry '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 downloads
para new
e finalmente new
entre 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 new
está no mesmo nível do caminho que downloads
você, basta mover tudo downloads
para dentro new
e depois fazer o new
download`.
No entanto, se você já tiver a subpasta new
criada e não quiser criar outra, não se preocupe - basta alterar o mkdir
comando no lado esquerdo do primeiro &&
no comando mostrado acima para um mv
comando, pressionando new
a tecla caminho; em outras palavras, enquanto você ainda estiver em /myuser/downloads/
, você pode mudar mkdir ../new
para 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 * new
entanto, ele lamentará "não pode mudar de novo para novo" ou algo semelhante. Talvezmv -i * new
você evite substituições.