Estou no caminho:
/myuser/downloads/
E eu crio uma subpasta:
/myuser/downloads/new
Agora, quero mover todos os arquivos e pastas / subpastas da pasta de downloads para a subpasta.
como posso fazer isso?
Eu tentei:
mv -R *.* new/
Mas o movimento não aceita a opção -R que parece.
mv * new
entanto, ele lamentará "não pode mudar de novo para novo" ou algo semelhante. Talvezmv -i * new
você evite substituições.Respostas:
O comando
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:
(é sempre melhor desabilitar
dotglob
para evitar surpresas ruins).fonte
!(something)
?dev
para o meu local atual, tenho que executarmv !(dev) dev
? Eu recebo-bash: !: event not found
setopt extendedglob
para definir o modo glob estendido no zsh.^
é o símbolo de exclusão, omv ^new new
que faria o truque. em seguida, para ver todas as opções definidas em zsh você pode usarsetopt
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:
Adicionando uma explicação para a solução acima:
Nas páginas do manual:
mv -t
grep -v
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 elegrep -v
para o diretório de destinofonte
mv: illegal option -- t
. Isso é porque eu estou usandozsh
?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, estavacentos
usando a distribuição Linuxbash
.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.
fonte
Se você deseja mover todos os arquivos de uma pasta para uma de suas subpastas, use o seguinte comando:
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
.fonte
new
e tentei este comando, eu recebomv: missing file operand
eTry 'mv --help' for more information
Você pode tentar esse processo alternativo - permaneça no caminho
mas, em vez de primeiro criar o
/myuser/downloads/new/
diretório, crie uma pasta no/myuser/
diretório, com o comandomkdir ../new
, mova todos os arquivosdownloads
paranew
e finalmentenew
entredownloads
. Você pode fazer isso em uma linha, enquanto estiver no/myuser/downloads/
caminho, com o comando: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 quedownloads
você, basta mover tudodownloads
para dentronew
e depois fazer onew
download`.No entanto, se você já tiver a subpasta
new
criada e não quiser criar outra, não se preocupe - basta alterar omkdir
comando no lado esquerdo do primeiro&&
no comando mostrado acima para ummv
comando, pressionandonew
a tecla caminho; em outras palavras, enquanto você ainda estiver em/myuser/downloads/
, você pode mudarmkdir ../new
paramv new ..
. Em seguida, a subpastanew
[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/
: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, comogrep
. Os comandos escritos acima são suficientes para seus propósitos, no entanto.fonte