Copier la dernière ligne de plusieurs fichiers dans un seul fichier

J’ai un certain nombre de fichiers dans un répertoire. Je voudrais parcourir le répertoire et mettre la dernière ligne de chaque fichier dans un nouveau fichier unique. IE, ce nouveau fichier devrait contenir la dernière ligne de chaque fichier du répertoire. J’ai essayé d’utiliser

tail -n 1 | cat > newfile.txt 

mais qui a inséré le nom du fichier source entre chaque ligne. J’ai également essayé d’écrire un script shell, mais la seule chose qu’il a réussi à faire est de créer le fichier de destination, puis de l’exécuter indéfiniment sans jamais append de données. Quelle est la bonne façon de faire cela? Toute aide est très appréciée.

Au moins la tail coreutils a un drapeau -q qui ne produit pas les en-têtes, donc un simple:

 tail -q -n1 * > OUTFILE 

Travaillerait.

Utilisez find :

 find . -type f -exec tail -n1 {} >> newfile.txt \; 

Ou si vous ne voulez pas parcourir les sous-répertoires:

 find . -depth 1 -type f -exec tail -n1 {} >> newfile.txt \; 

find works, mais une boucle for fonctionne également si vous êtes dans sh / bash / ksh / zsh.

 for filename in *; do tail -n 1 "$filename" >> /path/to/newfile.txt done 

Notez que vous pouvez avoir des résultats étranges avec newfile.txt dans le même répertoire que celui sur lequel vous exécutez votre boucle for * .