Você pode fazer isso com o find:
$ find -maxdepth 1 -not -name subdir -print0 | xargs -0 mv -t subdir
Onde:
-
-maxdepth 1
restringe a passagem de localização para o diretório atual (não uma opção POSIX, mas, por exemplo, disponível no GNUfind
) -
-print0
diz 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
-
-0
dizxargs
sobre os 0 bytes - mais uma vez, não POSIX, mas por exemplo compreendido por e. GNUxargs
-
-t
instruimv
que 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