Quelle est la manière la plus rapide et la plus pragmatique de combiner tous les fichiers * .txt d'un répertoire en un seul grand fichier texte?
Actuellement, j'utilise Windows avec cygwin, j'ai donc accès à BASH.
La commande shell Windows serait bien aussi mais je doute qu'il y en ait une.
echo *.txt | xargs cat > all.txt
N'oubliez pas, 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 soit nommer les fichiers de manière appropriée (01file.txt, 02file.txt, etc ...) ou spécifier chaque fichier dans l'ordre dans lequel vous voulez qu'il soit concaténé.
la source
La commande shell Windows
type
peut faire ceci:La
type
commande Type écrit également les noms de fichiers dans stderr, qui ne sont pas capturés par l'>
opérateur de redirection (mais s'afficheront sur la console).la source
Vous pouvez utiliser le shell Windows
copy
pour concaténer des fichiers.De l'aide:
la source
Soyez prudent, car aucune de ces méthodes ne fonctionne avec un grand nombre de fichiers. Personnellement, j'ai utilisé cette ligne:
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 bonne façon d'itérer sur les fichiers d'un répertoire. Par conséquent, les expressions blasphématoires comme
$(ls | grep ".txt")
doivent être remplacées par*.txt
(voir l'article ici ).Bonne solution
la source
for i in $(ls *.txt);do cat $i >> output.txt;done
?ls | grep
c'est un très mauvais contre-modèle).ls *.txt
échec ne serait-il pas trop important (liste d'arguments trop longue)?la manière la plus pragmatique avec le shell est la commande cat. d'autres moyens incluent,
la source
cat
méthodes ci-dessus concaténera la dernière ligne et la première ligne des fichiers adjacents.Et cette approche?
la source
-maxdepth 1
à lafind
commande.sort -u --output="$OUTPUT_FILE" --files0-from=- < <(find "$DIRECTORY_NAME" -maxdepth 1 -type f -name '*.txt' -print0)
Par exemple:
Cela prendra tous les fichiers txt dans le dossier C: \ et l'enregistrera dans le dossier C: \ 1 sous le nom de all.txt
Ou
Par exemple:
Cela prendra tous les fichiers présents dans le dossier et y placera le contenu dans C: \ 1 \ all.txt
la source
Vous pouvez faire comme ça:
cat [directory_path]/**/*.[h,m] > test.txt
si vous utilisez
{}
pour inclure l'extension des fichiers que vous recherchez, il y a un problème de séquencement.la source
Lorsque vous rencontrez un problème où il cat all.txt dans all.txt, vous pouvez essayer de vérifier que all.txt est existant ou non, s'il existe, supprimer
Comme ça:
[ -e $"all.txt" ] && rm $"all.txt"
la source
cat *.txt > all.txt
>
commande écrase all.txt s'il existe>>
ajoute des données au fichier existanttout cela est méchant ...
trucs faciles.
la source
find . -iname "*.txt" -maxdepth 1 -exec cat {} >> out.txt \;