GNU/Linux >> Tutoriels Linux >  >> Linux

Comment calculer le nombre de fichiers pouvant être passés en arguments à une commande pour le traitement par lots ?

Laissez xargs faire le calcul pour vous.

printf '%s\0' files/* | xargs -0 mv -t new_files_dir

Votre question semble supposer qu'il existe une "limite réelle du nombre d'arguments", alors qu'en fait c'est une combinaison de deux limites :

  1. la somme des longueurs de chaîne des arguments de ligne de commande et variables d'environnement, y compris leurs octets NUL de fin.

  2. la longueur de chaîne maximale d'un seul argument de ligne de commande.

Par exemple, vous pourrez peut-être appeler une commande avec 200 000 arguments à une seule lettre, avec 100 000 arguments à deux lettres, mais pas avec un seul argument de plus de 128 k octets.

En supposant que le xargs de GNU coreutils, xargs --show-limits </dev/null montrera quelles sont ces limites sur votre système.

Sur n'importe quel système, xargs ne sera pas utilisez les limites maximales de votre système lors de la construction de lignes de commande, mais choisirez quelque chose de raisonnable (cela n'aurait aucun sens de mettre le système à rude épreuve de cette façon).


Si c'est vraiment important, vous pouvez écrire votre propre batch-move programme en C, qui prend par ex. la liste des fichiers comme entrée standard et effectue le déplacement à l'aide des appels système Unix appropriés.

Sinon, le "découvrez les limites et travaillez jusqu'à cela" est exactement quoi xargs(1) (version GNU sur Linux, ici) le fait. Je doute fort que vous obteniez beaucoup plus vite.


Linux
  1. Comment utiliser la commande Linux find pour rechercher des fichiers

  2. Shell - Comment trouver le répertoire d'une commande ?

  3. Comment puis-je passer tous les arguments avec xargs au milieu de la commande sous Linux

  4. Comment puis-je exécuter une commande différente mais avec les mêmes arguments ?

  5. Comment puis-je ouvrir un fichier avec des numéros de ligne affichés à partir de la ligne de commande dans 'vi' ?

Comment rechercher des fichiers à partir de la ligne de commande Linux

Comment rechercher des fichiers avec la commande fd sous Linux

Comment utiliser la commande fd sur le système Linux

Comment compter le nombre de fichiers dans un répertoire sous Linux

Comment utiliser la commande xargs sous Linux ?

Comment utiliser la commande which sous Linux