Como você está usando o SLES, pode usar as extensões do GNU para torná-lo mais seguro:
find trainB -mindepth 1 -maxdepth 1 ! -name '.*' -print0 |
shuf -n 5533 -z |
xargs -r0 mv -t testB
Isso usa find para processar listas de arquivos via em vez de argumentos de linha de comando, depois embaralha-as, limita a saída e finalmente as move para testB . As opções -print0 , -z e -0 garantem que os terminadores nul sejam usados em vez de novas linhas.
Em vez de find , você pode usar:
printf '%sfind trainB -mindepth 1 -maxdepth 1 ! -name '.*' -print0 |
shuf -n 5533 -z |
xargs -r0 mv -t testB
' trainB/*
printf sendo incorporado em bash , ele não é afetado por essa limitação lista de argumentos por muito tempo da chamada de sistema execve() . Isso é potencialmente menos eficiente, já que o shell precisa construir a lista inteira e classificá-la, enquanto find exibe os caminhos de arquivos não classificados como aparecem.