Modificar fitxers des de la consola

Publication date
10/09/2006
Categories
, , ,

A l'hora de modificar fitxers des de la consola sovint em trobo que si redirigeixo els canvis que hi faig directament al propi fitxer...

$ sort fitxer > fitxer

...doncs resulta que me l'acabo carregant (que queda buit, per ser més exactes). Així que em veig obligat a redirigir el nou contingut a un nou fitxer temporal i d'aquest a l'original:

$ sort fitxer > /tmp/foo && mv /tmp/foo fitxer

Però l'apaño no és massa maco i és bastant engorrós tenint en compte que això de modificar fitxers és una tasca força comuna.

No sé si hi ha cap forma millor de fer-ho (espero que sí) però se m'ha ocurregut de fer un script que creï aquest fitxer temporal i reescrigui el fitxer original per mi.

Web del projecte

Un cop guardat (jo el tinc a /usr/local/bin amb el nom save-as) i assignats els permissos d'execució (chmod +x save-as) ja es pot utilitzar de la següent manera:

$ sort fitxer | save-as  fitxer

Tot i que amb aquest script ja faig seria estupendu que algun gurú de la consola expliques la manera (que segur que hi és) de fer-ho igual d'elegant i senzill però sense haver de tirar d'un script.

Actualització - 9/11/2006

Avui fent servir l'script m'he adonat d'un parell de coses que no funcionaven del tot bé:

  • L'arxiu temporal es creava al directori actual. Ara es crea al directori temporal del sistema.
  • El fitxer no es copiava correctament per la forma que s'utilitzava el read i l'echo. Ara s'utilitza el dd que no fa coses rares i segur que va mil vegades més ràpid.
  • A vegades quedaven arxius temporals sense esborrar

Actualització de 14 de febrer de 2008

He mogut l'script a una web pròpia.

4 comments

  1. Nakashima

    10/11/2006 | #

    Jo també fa un temps vaig escriure un script per fer això perquè no vaig trobar la forma de fer-ho elegantment. Faré una ullada als comentaris a veure si algun gurú ens dóna la resposta ;)

  2. Albert Sellarès

    10/29/2006 | #

    El més normal és fer servir el què t'ofereix l'èina. Per exemple si vols fer un sort i guardar-lo en el mateix fitxer, és usar el parametre -o. Ex: sort -o fitxer < fitxer

    Si el que vols és poder-ho usar en qualsevol comanda, et pot servir la comanda "tee". Ex: cut -d ':' -f 1 passwd | tee passwd

    Salutacions Francesc!

  3. Francesc Rosàs

    10/29/2006 | #

    Què tal Albert!

    Em temo que amb el tee passa el mateix que amb el '>', matxaca el fitxer perquè no espera a que s'hagi rebut tot el contingut per obrir-lo i escriure-hi.

  4. Albert Sellarès

    12/30/2006 | #

    tee -a ? :P

    Salut Francesc!

    PD: Estava fent endreça de bookmarks i vaig retrobar el teu blog :)

Comment this post

Fields marked with * are required.

*
It won't be made public. If you have a gravatar it will be displayed.
*