Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 24/03/2021, à 14: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, à 15: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, à 14: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.

En ligne

#3 Le 24/03/2021, à 15: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.

man sed a écrit :

-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, à 15: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, à 15:43)

Hors ligne

#5 Le 24/03/2021, à 15: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 smile

Merci de ton lien, très instructif wink

man sed a écrit :

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, à 15: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