Você pode fazer isso com o find:
$ find -maxdepth 1 -not -name subdir -print0 | xargs -0 mv -t subdir
Onde:
-
-maxdepth 1restringe a passagem de localização para o diretório atual (não uma opção POSIX, mas, por exemplo, disponível no GNUfind) -
-print0diz ao find para terminar linhas com 0 bytes - assim, fazer o comando funcionar com nomes de arquivos incomuns (por exemplo, aqueles contendo novas linhas), também não POSIX, mas fornecidos por, e. GNUfind -
-0dizxargssobre os 0 bytes - mais uma vez, não POSIX, mas por exemplo compreendido por e. GNUxargs -
-tinstruimvque o primeiro argumento é o alvo (não o último) - isto é ideal para este caso de uso - como antes, a opção não está em POSIX, mas por exemplo implementado pelo GNUmv