Comment ajouter un fichier au début d'un autre en Shell
Rédigé le . Édité le .Ce message a originellement été posté sur un des mes anciens sites : Flyou.net [Dev] : Développements.
Les Tags d'origine (bash, ksh, Linux, Shell, Unix) n'ont pas été conservés.
Voilà le topo, vous faites du Shell (si si, y en a) et vous devez pour d'obscures raisons ajouter le contenu d'un fichier (appelons le aCopier.txt
) au début d'un autre (appelons le destination.txt
).
Par exemple :
fly@dtc:~$ cat aCopier.txt
# Ho la belle ligne que je me dois de copier au début d'un autre fichier
# Entete,id,securities,ftt(French_Tax_Tobin)
fly@dtc:~$ cat destination.txt
bnp,7553,37426,130054874
cmcic,425,1271,99412364
ca,1103,17345,94577741
sg,211,914,4113647
Souvent les gens prennent le fichier destination, le copient à la fin du fichier à copier et remplace le fichier destination, ce qui se traduit souvent par un :
fly@dtc:~$ cat destination.txt >> aCopier.txt && mv aCopier.txt destination.txt
fly@dtc:~$ cat destination.txt
# Ho la belle ligne que je me dois de copier au début d'un autre fichier
# Entete,id,securities,ftt(French_Tax_Tobin)
bnp,7553,37426,130054874
cmcic,425,1271,99412364
ca,1103,17345,94577741
sg,211,914,4113647
J'y vois personnellement deux inconvénients :
- L'opération n'est pas atomique[1]
- On perd le fichier
aCopier.txt
dans l'opération.
Donc pour moi, la solution est plutôt : echo "$(<aCopier.txt)" "$(<destination.txt)" > destination.txt
Non seulement, cela a l'avantage d'être du Shell only (Bash ou KSH), mais il me reste le fichier à copier...
Notes
[1] Par atomique, j'entends qu'il y a plusieurs étapes successives et donc que pour un retour arrière, c'est plus embettant. D'autant plus à cause du point suviant...