Há uma pasta com muitos arquivos:
112.mkv
123.md5
123.mkv
221.mkv
467.mkv
aa1.mkv
abc.md5
abc.mkv
bbc.mkv
dde.md5
dde.mkv
ggh.mkv
....
xxy.md5
xxy.mkv
xxz.mkv
Como posso mover .md5
arquivos e os .mkv
arquivos associados para um novo diretório (usando Bash)?
123.md5
123.mkv
abc.md5
abc.mkv
dde.md5
dde.mkv
xxy.md5
xxy.mkv
Quero mover esses arquivos para um novo diretório, como mkvandmd5/
.
Como alternativa, há alguma dica no Midnight Commander para marcar esses arquivos .md5
e os associados .mkv
?
Com
bash
e sua expansão de parâmetros :Saída:
Remova
echo
se a saída parecer boa.Se você quer mover o
*.mkv
arquivo que tem um.md5
arquivo correspondente (assim como esse.md5
arquivo), emzsh
, você pode fazer:Se sempre houver um
.mkv
for each.md5
, isso pode ser simplificado para:Ou:
Com
bash
(também funcionaria em zsh ou yash se você substituísseshopt -s nullglob
porset -o nullglob
e${#files[@]}
por${files[#]}
em yash), você poderia fazer:Ou se sempre há um
.mkv
para cada.md5
:Use esta frase de efeito, que utiliza
find
exargs
:Detalhes:
find . -maxdepth 1 -mindepth 1 -name '*.mkv'
: Encontra todos os arquivos no diretório atual.mkv
.xargs -I{} basename {} .mkv
: Remove.mkv
a extensão (e o nome do diretório, mas isso é irrelevante aqui) dos nomes de arquivo, deixando apenas o nome base.xargs -I{} mv {}.mkv {}.md5 dest_dir/
: Move os arquivos com este nome base, extensões.mkv
e.md5
para o diretóriodest_dir/
.Você pode tentar usar um script completo usando uma matriz mais alguma expansão de parâmetro
Remova
echo
se/quando estiver satisfeito com a saída.Ver
A chave para resolver esse problema é gerar uma lista de arquivos que exclua entradas de nomes base exclusivos.
Aqui está um método com um comando e sua saída — seguido de uma explicação:
Explicação:
Mover esses arquivos para o diretório de destino é uma tarefa trivial. Por exemplo:
Ou você pode canalizar a saída para um comando while e mover os arquivos conforme eles são gerados, por exemplo: