J'ai besoin de pouvoir trier par ordre alphabétique la sortie de find
avant de la rediriger vers une commande. Saisie de | sort |
entre n'a pas fonctionné, alors que 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 gérer cela avec le commutateur -z:
find . -print0 | sort -z | xargs -r0 yourcommand
Certaines versions de sort
ont un -z
option, qui permet les enregistrements terminés par null.
find folder1 folder2 -name "*.txt" -print0 | sort -z | xargs -r0 myCommand
De plus, vous pouvez également é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
Ajouter le -r
option à xargs
pour vous assurer que myCommand
est appelé avec un argument.
Je pense que vous avez besoin du -n
indicateur pour le tri #
Selon l'homme:
-n, --numeric-sort
compare according to string numerical value
modifier
Le print0 peut avoir quelque chose à voir avec ça, je viens de le tester. Supprimez print0, vous pouvez mettre fin à la chaîne en tri en utilisant le -z
drapeau
Si vous avez GNU Parallel http://www.gnu.org/software/parallel/ installé, 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 pour GNU Parallèle pour en savoir plus: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1