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
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
Réponses:
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.
-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 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 -n
drapeau 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' -z
indicateur
print0
semble 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 ...sort
Cela finit à la fin de la liste ... avecpython
le classement au début. (Peut-être que python fait leLC_COLLATE=C