5 votes

Comment concaténer les fichiers trouvés par la commande find dans bash

Recherche de fichiers à l'aide de la commande bash find j'aimerais concaténer les fichiers résultants dans un nouveau fichier. Par exemple, si la commande find donne :

find . -name "configuration_dev.txt"

./tmp/configuration1/configuration_dev.txt
./tmp/configuration2/configuration_dev.txt

J'aimerais concaténer le contenu des deux fichiers dans un nouveau fichier directement sous la forme d'une commande bash.

4voto

aleksander_si Points 191

La commande permettant d'obtenir le résultat souhaité est la suivante :

find . -name "configuration_dev.txt" -exec cat > testing.txt {} +

Une bonne explication de la ligne ci-dessus est fournie ici : Quelle est la signification de {} + dans la commande -exec de find ?

4voto

pa4080 Points 27038

Pour ce faire, il est possible d'acheminer la sortie de l'application find a xargs et concaténer le contenu des fichiers par cat vous pouvez alors rediriger la sortie vers un nouveau fichier :

find . -name '*file*' | xargs -I{} cat "{}" > output

La commande ci-dessus appellera cat pour chaque fichier, puis l'ensemble de la sortie de l'application xargs sera redirigée vers la déclaration output fichier. La méthode la plus efficace consiste à utiliser le délimiteur null - grâce à @pLumo pour cette mise à jour :

find . -name '*file*' -print0 | xargs -0 cat > output

0voto

Kulfy Points 16173

Vous pouvez également ouvrir plusieurs fichiers dans cat et redirige la sortie vers un nouveau fichier. Étant donné que les noms de plusieurs fichiers seraient renvoyés par find vous pouvez l'utiliser à l'intérieur cat en utilisant ` (backtick) :

cat `find . -name "configuration_dev.txt"` > testing.txt

La commande située entre les crochets sera exécutée et remplacée par la sortie de la commande en supprimant le caractère de fin de ligne et en insérant un espace.

Vous pouvez le confirmer en exécutant

A=`find . -name "configuration_dev.txt"`
echo $A

Vous verrez que le résultat sera quelque chose comme :

./tmp/configuration/configuration_dev.txt ./tmp/configuration/configuration_dev.txt

Ainsi, le nombre réel de cat sous le capot sera :

cat ./tmp/configuration/configuration_dev.txt ./tmp/configuration/configuration_dev.txt > testing.txt

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X