Quel est le moyen le plus rapide et le plus pragmatique de combiner tous les fichiers * .txt d’un répertoire en un seul fichier texte?
Actuellement, j'utilise Windows avec cygwin, j'ai donc accès à BASH.
La commande Windows Shell serait bien aussi mais je doute qu'il en existe un.
Cela ajoute la sortie à tout.txt
cat *.txt >> all.txt
Cela écrase all.txt
cat *.txt > all.txt
N'oubliez pas que pour toutes les solutions données jusqu'à présent, le shell décide de l'ordre dans lequel les fichiers sont concaténés. Pour Bash, IIRC, c'est l'ordre alphabétique. Si l'ordre est important, vous devez nommer les fichiers de manière appropriée (01file.txt, 02file.txt, etc.) ou spécifier chaque fichier dans l'ordre que vous souhaitez concaténer.
$ cat file1 file2 file3 file4 file5 file6 > out.txt
La commande shell Windows type
peut faire ceci:
type *.txt >outputfile
La commande de type type
écrit également les noms de fichier sur stderr, qui ne sont pas capturés par l'opérateur de redirection >
(mais s'afficheront sur la console).
Vous pouvez utiliser Windows Shell copy
pour concaténer des fichiers.
C:\> copy *.txt outputfile
De l'aide:
Pour ajouter des fichiers, spécifiez un fichier unique pour la destination, mais plusieurs fichiers pour la source (en utilisant des caractères génériques ou le format fichier1 + fichier2 + fichier3).
la manière la plus pragmatique avec Shell est la commande cat. d'autres moyens incluent,
awk '1' *.txt > all.txt
Perl -ne 'print;' *.txt > all.txt
Soyez prudent, car aucune de ces méthodes ne fonctionne avec un grand nombre de fichiers. Personnellement, j'ai utilisé cette ligne:
for i in $(ls | grep ".txt");do cat $i >> output.txt;done
EDIT: Comme quelqu'un l'a dit dans les commentaires, vous pouvez remplacer $(ls | grep ".txt")
par $(ls *.txt)
EDIT: grâce à l’expertise de @gnourf_gnourf, l’utilisation de glob est la méthode correcte pour parcourir les fichiers d’un répertoire. Par conséquent, les expressions blasphématoires telles que $(ls | grep ".txt")
doivent être remplacées par *.txt
(voir l'article ici ).
Bonne solution
for i in *.txt;do cat $i >> output.txt;done
Que diriez-vous de cette approche?
find . -type f -name '*.txt' -exec cat {} + >> output.txt
type [source folder]\*.[File extension] > [destination folder]\[file name].[File extension]
Par exemple:
type C:\*.txt > C:\1\all.txt
Cela va prendre tous les fichiers txt dans le dossier C:\et les sauvegarder dans le dossier C:\1 sous le nom all.txt
Ou
type [source folder]\* > [destination folder]\[file name].[File extension]
Par exemple:
type C:\* > C:\1\all.txt
Cela prendra tous les fichiers présents dans le dossier et y mettra le contenu dans C:\1\all.txt
Lorsque vous rencontrez un problème dans lequel all.txt se loge dans all.txt, vous pouvez essayer de vérifier si all.txt est existant ou non. S'il existe, supprimez
Comme ça:
[ -e $"all.txt" ] && rm $"all.txt"
Vous pouvez faire comme ceci: cat [directory_path]/**/*.[h,m] > test.txt
si vous utilisez {}
pour inclure l’extension des fichiers à rechercher, il existe un problème de séquencement.