Você precisa que a expansão do caractere curinga ocorra em um shell executado depois que file
tenha sido substituído pelo nome do arquivo correspondente. Então você precisa iniciar um shell a partir de xargs
.
Melhor do que usar xargs
, use o predicado exec
para find
. É mais simples e não tem problemas de citação.
find -maxdepth 1 -regex 'myRegexExpHere' -exec sh -c 'mv "$0"/* Desktop/New\ folder/' {} \;
Você provavelmente está complicando demais as coisas. Esse uso simples de find
pode ser expresso diretamente na maioria das camadas. O Ksh tem uma sintaxe para expressões regulares:
-
@(EXPR1|EXPR2)
corresponde aEXPR1
ouEXPR2
-
*(EXPR)
corresponde a 0 ou mais ocorrências deEXPR
-
+(EXPR)
corresponde a uma ou mais ocorrências deEXPR
-
?(EXPR)
corresponde a 0 ou 1 ocorrência deEXPR
Essa sintaxe também está disponível no bash se você executar shopt -s extglob
primeiro e, em zsh, se você executar setopt ksh_glob
primeiro. Então você pode usar
mv REGEX/* Desktop/New\ folder/