Je dois être capable de trier par ordre alphabétique le résultat findavant de le diriger vers une commande. Entrer | sort |entre n'a pas fonctionné, alors que pourrais-je faire?
find folder1 folder2 -name "*.txt" -print0 | xargs -0 myCommand
Je dois être capable de trier par ordre alphabétique le résultat findavant de le diriger vers une commande. Entrer | sort |entre n'a pas fonctionné, alors que pourrais-je faire?
find folder1 folder2 -name "*.txt" -print0 | xargs -0 myCommand
Réponses:
Certaines versions de sortont une -zoption, qui autorise les enregistrements à terminaison nulle.
find folder1 folder2 -name "*.txt" -print0 | sort -z | xargs -r0 myCommand
De plus, vous pouvez aussi écrire un script de haut niveau pour le faire:
find folder1 folder2 -name "*.txt" -print0 | python -c 'import sys; sys.stdout.write("\0".join(sorted(sys.stdin.read().split("\0"))))' | xargs -r0 myCommand
Ajoutez l' -roption à xargspour vous assurer qu'il myCommandest appelé avec un argument.
-t \0option de tri ( -zsynonyme)
|sortsolutions est que vous ne pouvez plus utiliser -exec. OK, bien qu'il soit possible de réécrire votre déclaration -execafin qu'elle fonctionne avec xargs, la question est, qu'en est-il des "mini-scripts" ? ( sh -c ...) Je n'appellerais pas cela trivial de transformer un mini-script 'sh -c' avec plusieurs commandes afin qu'il puisse fonctionner xargs(si possible, c'est-à-dire)
printf %s\\n a b c d e | xargs -n3 sh -c 'printf %s, "$@"; printf \\n' x
Je pense que vous avez besoin du -ndrapeau pour trier #
Selon le genre d'homme:
-n, --numeric-sort
compare according to string numerical value
modifier
Le print0 peut avoir quelque chose à voir avec cela, je viens de tester cela. Prenez le print0, vous pouvez mettre fin à la chaîne en triant en utilisant l' -zindicateur
print0semble séparer les noms de fichiers d’un espace, c’est ce que j’ai besoin de transmettre à ma commande, malheureusement
Si vous avez installé GNU Parallel http://www.gnu.org/software/parallel/, vous pouvez le faire:
find folder1 folder2 -name "*.txt" -print |
sort |
parallel myCommand
Vous pouvez installer GNU Parallel simplement en:
wget http://git.savannah.gnu.org/cgit/parallel.git/plain/src/parallel
chmod 755 parallel
cp parallel sem
Regardez les vidéos d'introduction à GNU Parallel pour en savoir plus: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1
.différemment ...sortCela finit à la fin de la liste ... avecpythonle classement au début. (Peut-être que python fait leLC_COLLATE=C