Com bash
shopt -s extglob
mv -- !(*.jpg|*.png|*.bmp) targetdir/
Eu tenho uma pasta com imagens (png, bmp, jpg) e arquivos sem extensão.
Não consigo descobrir como mover apenas os arquivos sem extensão. Eles são todos arquivos numerados aleatoriamente.
Com bash
shopt -s extglob
mv -- !(*.jpg|*.png|*.bmp) targetdir/
Usando o operador global !(...)
ksh extended glob para negação, assim em ksh
, zsh -o kshglob
ou bash -O extglob
:
rm -- !(*.*) /dest
Move os arquivos cujo nome não contém um ponto (observe que em shells que não sejam zsh
, se não houver tal arquivo, ele ainda poderá mover o arquivo chamado !(*.*)
, mesmo que esse arquivo contenha um ponto ).
Usando zsh
' ^
extended glob operator para negação, portanto, em zsh -o extendedglob
:
rm -- ^*.* /dest
Em todos os itens acima, arquivos ocultos não seriam movidos, primeiro porque seu nome contém um ponto (eles começam com um ponto), mas também porque arquivos ocultos são excluídos de globs, a menos que o próprio glob comece com um literal .
.
Se você quiser também mover .foo
arquivos, mas não .foo.png
, você pode fazer:
mv -- ^?*.*(D) /dest # with zsh -o extended-glob
mv -- !(?*.*) /dest # with bash -O extglob -O dotglob
# or zsh -o kshglob -o dotglob -o nobareglobqual
# or env FIGNORE='@(.|..)' ksh93
mv -- @(.|)+([^.]) /dest # with bash -O extglob or AT&T ksh
Tags command-line rename files wildcards