Modificar fitxers des de la consola
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.
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
readi l'echo. Ara s'utilitza elddque 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.
Comment this post
Fields marked with * are required.
4 comments
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 ;)
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!
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.
Albert Sellarès
12/30/2006 | #
tee -a ? :P
Salut Francesc!
PD: Estava fent endreça de bookmarks i vaig retrobar el teu blog :)