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.