Je dois être capable de trier par ordre alphabétique le résultat find
avant 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
Utilisez find
comme d'habitude et délimitez vos lignes avec NUL. GNU sort
peut les gérer avec le commutateur -z:
find . -print0 | sort -z | xargs -r0 yourcommand
Certaines versions de sort
ont une -z
option, 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' -r
option à xargs
pour vous assurer qu'il myCommand
est appelé avec un argument.
.
différemment ...sort
Cela finit à la fin de la liste ... avecpython
le classement au début. (Peut-être que python fait leLC_COLLATE=C
-t \0
option de tri (-z
synonyme)|sort
solutions est que vous ne pouvez plus utiliser-exec
. OK, bien qu'il soit possible de réécrire votre déclaration-exec
afin qu'elle fonctionne avecxargs
, 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 fonctionnerxargs
(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
-n
drapeau pour trier #Selon le genre d'homme:
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'
-z
indicateurla source
print0
semble séparer les noms de fichiers d’un espace, c’est ce que j’ai besoin de transmettre à ma commande, malheureusementSi vous avez installé GNU Parallel http://www.gnu.org/software/parallel/, vous pouvez le faire:
Vous pouvez installer GNU Parallel simplement en:
Regardez les vidéos d'introduction à GNU Parallel pour en savoir plus: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1
la source