À utiliser cat
avec la redirection de sortie. Syntaxe: cat file [file] [[file] ...] > joined-file
.
Exemple avec seulement deux fichiers (vous pouvez en avoir beaucoup plus):
$ echo "some text in a file" > file1
$ echo "another file with some text" > file2
$ cat file1 file2 > mergedfiles
$ cat mergedfiles
some text in a file
another file with some text
Dans le cas où vous avez "beaucoup de documents", utilisez le globbing shell (modèles):
cat input-files-dir/* > joined-file
Cela joindra tous les fichiers de ce répertoire au répertoire actuel (l'empêchant ainsi de correspondre au fichier de sortie lui-même). Il est totalement indépendant de l'utilisation cat
et de la redirection de sortie - c'est juste Bash qui fournit tous les fichiers comme arguments cat
.
Types de fichier
Il collera (joindra) les fichiers comme vous le feriez avec du papier et du ruban adhésif. Il ne se soucie pas que le format de fichier réel soit capable de gérer cela. Il fonctionnera pour les fichiers texte, mais pas pour les PDF, ODT, etc. Eh bien, il les collera ensemble, mais ce n'est plus un PDF / ODT valide.
Ordre d'adhésion
Comme l'a souligné Phoibos, le globbing du shell entraînera un ordre alphabétique des noms de fichiers. Voici comment fonctionne le globbing Bash et shell.
Addendum sur l' input file is output file
erreur
Lorsque le modèle des fichiers d'entrée correspond au même fichier qu'en sortie, cela provoquera une erreur. C'est une caractéristique de sécurité. Exemple: cat *.txt > out.txt
exécuter la deuxième fois provoquera cela.
Que pouvez-vous faire à ce sujet:
- Choisissez un modèle plus spécifique pour correspondre aux fichiers d'entrée réels, ne correspondant pas au nom de sortie. Exemple: le motif des fichiers d'entrée
*.txt
avec le fichier de sortie output.out
ne se heurtera pas.
- Travaillez dans différents répertoires. Dans l'exemple ci-dessus, j'ai utilisé un
input-files-dir
répertoire séparé pour placer tous les fichiers et les exporter vers le répertoire de travail actuel. Cela rend impossible d'obtenir cette erreur.
ls
simplement la liste des correspondances. Par exemplels *.txt
pour voir ce qui est apparié.Un moyen simple de le faire est d'utiliser cat:
Si vous venez d'émettre,
cat file1 file2
vous verrez les deux fichiers sur la sortie standard. En utilisant>
, vous redirigez simplement la sortie standard vers un fichier. Cela fonctionnera également avec d'autres commandes.la source
Faites-le avec une simple boucle:
>>
ajoute au fichier.Remarque: si pour une raison quelconque vous devez réexécuter la commande, vous devez la supprimer
complete.txt
, sinon vous écririez le fichier sur lui-même, ce qui ne fonctionne pas.la source
cat
.cat *.txt
. La boucle for doit être triée.for
ou ailleurs dans Bash.Si les fichiers que vous souhaitez combiner finissent tous
.txt
, restez simple:Si le répertoire ne contient que des fichiers texte, c'est aussi simple:
(Notez qu'une fois que vous avez créé
combined.txt
, le faire à nouveau l'inclurait dans l'expansion de*
, conduisant à un comportement étrange).Si vous souhaitez sélectionner certains fichiers dans le répertoire et pas d'autres, il est préférable que les noms de fichiers vous permettent de distinguer ceux que vous souhaitez. Sinon, vous pouvez devenir chic avec
find
. Mais je doute que vous deviez aller aussi loin.la source
Le script d'action personnalisé Thunar écrit par cipricus m'a également inspiré pour écrire un script Nautilus similaire et j'ai pensé qu'il pourrait être utile pour d'autres qui regardent ce Q&R pour référence sur ce sujet. Voici donc:
la source
Il s'agit d'un complément et d'une variation par rapport aux autres réponses, liés à la mise en œuvre de ces solutions dans les actions personnalisées de Thunar.
Tous ne sont pas utilisables de cette manière, mais certains le sont.
Je pensais que le plus intéressant serait de pouvoir fusionner les fichiers sélectionnés du menu contextuel de Thunar .
Ceci est une variante de ce qui a été suggéré par Sadi dans un commentaire à gertvdijk de réponse :
Seuls les fichiers sélectionnés seront joints. Limitez les conditions d'apparence aux fichiers texte.
Un merci spécial à Sadi dont le commentaire m'a fourni la solution la plus claire et la plus à jour à mon problème.
J'ai accepté la réponse de gertvdijk comme définitive. Non seulement c'était l'occasion du commentaire de Sadi, mais cela semble être plus utile aux autres, fournissant une solution bien argumentée et complète (bien que légèrement supérieure à mes compétences en lecture CLI).
la source
Vous pouvez
find
également essayer la commande,Il trouve des
.txt
fichiers dans le répertoire courant et exécute lacat
commande sur chaque fichier fondé. Enfin, la sortie entière a été redirigée vers le nom de fichierfile
(créé directement dans le courant lui-même).Explication:
la source
Vous pouvez également simplement utiliser un utilitaire en ligne tel que merge-files-online.com
la source