#1 Le 24/03/2021, à 13:45
- Tawal
[Résolu] sed -i casse les liens durs (contournement)
Hello,
Je viens de me rendre compte que l'option -i de sed casse le lien dur du fichier
$ touch fich1
$ ln fich1 lien_dur_fich1
$
$ ls -il fich1 lien_dur_fich1
3276821 -rw-r--r-- 2 tawal tawal 0 mars 24 13:43 fich1
3276821 -rw-r--r-- 2 tawal tawal 0 mars 24 13:43 lien_dur_fich1
$
$ sed -i 's/x/y/' fich1
$
$ ls -il fich1 lien_dur_fich1
3276823 -rw-r--r-- 1 tawal tawal 0 mars 24 13:44 fich1
3276821 -rw-r--r-- 1 tawal tawal 0 mars 24 13:43 lien_dur_fich1
$
Y-aurait-il une parade ?
Merci
Dernière modification par Tawal (Le 24/03/2021, à 14:58)
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
#2 Le 24/03/2021, à 13:56
- Watael
Re : [Résolu] sed -i casse les liens durs (contournement)
$ tmpFile=$(mktemp -u)
$ sed 's/x/y/' fichier > "$tmpFile"
$ cat "$tmpFile" >fichier
$ rm "$tmpFile
?
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#3 Le 24/03/2021, à 14:37
- Tawal
Re : [Résolu] sed -i casse les liens durs (contournement)
Merci Watael.
J'avais pensé à passer par un fichier temporaire.
Mais je me demandais, s'il n'y avait pas plus direct.
-i[SUFFIX], --in-place[=SUFFIX]
edit files in place (makes backup if SUFFIX supplied)
En fait, cette option, que je comprends par "éditer en lieu et place", change l'inode du fichier.
Donc, bouge les données réelles du fichier sur le disque.
Je reste surpris.
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
#4 Le 24/03/2021, à 14:42
- kamaris
Re : [Résolu] sed -i casse les liens durs (contournement)
Si l'utilisation de liens symboliques au lieu de liens durs est envisageable, tu pourras utiliser --follow-symlinks.
Sinon, il n'y a probablement rien à faire de direct : voir https://www.gnu.org/software/sed/manual … rting-Bugs (sous-section « clobbers read-only files »).
Dernière modification par kamaris (Le 24/03/2021, à 14:43)
Hors ligne
#5 Le 24/03/2021, à 14:53
- Tawal
Re : [Résolu] sed -i casse les liens durs (contournement)
Oui bien sûr kamaris
Mais je préfère me prémunir, au cas où ... Même si les liens durs ne sont pas très utilisés, la rareté n'est pas l'absence
Merci de ton lien, très instructif
Rather, it will work on a temporary file that is finally renamed to the original name
C'est ce que je pensais sans en avoir la preuve.
Dernière modification par Tawal (Le 24/03/2021, à 14:53)
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne