0 votes

Comment introduire un répertoire entier de fichiers d'entrée à l'aide de cat sous Unix ?

J'aimerais exécuter un programme sur un répertoire de fichiers. Je sais comment le faire avec un seul fichier, en utilisant

cat myFile.xml | myProgram.py .

Comment puis-je exécuter myProgram.py sur un dossier, disons myFolder ?

Merci de votre attention !

3voto

RichieHindle Points 98544

En supposant que votre programme puisse accepter un nom de fichier comme premier argument de la ligne de commande, il est possible d'utiliser find pour trouver tous les fichiers du dossier, puis utiliser xargs pour exécuter votre programme pour chacun d'entre eux :

find myFolder | xargs -n 1 myProgram.py

En -n 1 signifie "exécuter le programme une fois par fichier". Si votre programme est heureux de recevoir plusieurs noms de fichiers sur sa ligne de commande, vous pouvez omettre l'option -n 1 y xargs exécutera votre programme moins de fois avec plusieurs fichiers sur sa ligne de commande.

( find effectuera une recherche récursive, de sorte que vous obtiendrez tous les fichiers dans et sous monDossier. Vous pouvez utiliser find myFolder -maxdepth 1 pour éviter cela).

(Merci à @Personman de m'avoir signalé que le programme sera exécuté pour le dossier lui-même ainsi que pour les fichiers. Vous pouvez utiliser find myFolder -type f à dire find pour ne renvoyer que les fichiers normaux).

2voto

Ukko Points 1658

J'aime

ls | xargs cat

pour son aspect de langage fonctionnel. YMMV.

1voto

Beta Points 37745

Que diriez-vous de.. :

for x in myFolder/*
do
cat $x | myProgram.py
done

1voto

Daniel Haley Points 19098

Si vous essayez simplement d'exécuter votre programme de données sur un tas de fichiers, la façon la plus simple et la moins compliquée est d'utiliser -exec dans find.

Supposons que vous souhaitiez exécuter des données sur tous les fichiers txt du répertoire actuel (et de ses sous-répertoires). C'est tout ce dont vous avez besoin :

find . -name "*.txt" -exec data {} \;

Si vous voulez le limiter au répertoire actuel, vous pouvez faire ceci :

find . -maxdepth 1 -name "*.txt" -exec data {} \;

Il existe de nombreuses options avec find.

0voto

Paul R Points 104036

cat myFolder/* | myProgram.py

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X