Newsgroup: it.comp.os.linux.iniziare
Titolo: swap di file

salve.
mi sta capitando sempre più spesso di avere la necessità di invertire il
nome di due file (partendo da file1 e file2 avere file2 e file1). Pensavo
quindi di farmi un piccolo script che facesse al caso mio.
Solo i file in genere son belli grossi, quindi mi stavo chiedendo qual è il
modo più efficiente.
inizialmente ho pensato a 3 mv 
TEMP="$(mktemp)"
mv "$file1" "$TEMP"
mv "$file2" "$file1"
mv "$TEMP" "$file2"
rm "$TEMP"
solo che ho /tmp in una partizione separata dalla /home, quindi copio
fisicamente i dati...
ho pensato di usare ln+rm per creare link hardware, evitando quindi i
problemi di copia del contenuto dei file, ma penso che mv sotto non faccia
granché di diverso.
non posso neanche NON usare mktemp (o simili) perché non voglio rischiare di
sovrascrivere un file...
al limite pensavo... ma non c'è un modo per "leggersi" l'inode di un file, e
sovrascriverlo? tanto i file da rinominare saranno sempre sullo stesso fs
-- 
By ZeD


wrote:

mv $file1 $file2.tmp
mv $file2 $file1
mv $file2.tmp $file2
così non sposti dati.
eventualmente crei un controllo per verificare che non esista già un
file $file2.tmp
suffisso=$(date +%s)
if [ ! -f $file2.$suffisso ]; then {
mv $file1 $file2.$suffisso
else
echo "il file esiste già"
}
fi
per leggere un inode ls -i


se vuoi usare mktemp usalo allora con l'opzione -p

 fisicamente i dati...
mktemp -p `pwd`

 fs
Certo, basta reimplementare da zero i driver per il filesysyem 
ext3. Perché tu usi ext3 vero?
PS Perchè non parli italiano? 
Quale parte di "scambiare due file" non ti piace?

 ...
In effetti si potrebbe sostituire il primo mv con un ln,
questo potrebbe prevenire una alea
#! /bin/bash
if [ $# != 2 ]
  then
   echo 1>&2 $0: Numero di argomenti errato.
   echo 1>&2 La sintassi è \"$0 file1 file2\"
   exit 2
  fi
if [ -a "$1" ]
  then
    echo 1>&2 $0: Il file \"$1\" non esiste
    exit 3
  fi
if [ -a "$2" ]
  then
    echo 1>&2 $0: Il file \"$2\" non esiste
    exit 3
  fi
filescambio=$(mktemp swap.XXXXXX) || exit 1
ln -f "$1" $filescambio ||
 {
  echo 1>&2 $0: Nessuno scambio effettuato  tra i file \"$1\" e \"$2\".
  exit 1
 }
mv "$2" "$1" ||
 {
  echo 1>&2 $0: Non posso scambiare i file \"$1\" e \"$2\".
  rm $filescambio
  exit 1
 }
mv $filescambio "$2" || 
 {
   echo 1>&2 $0: ATTENZIONE!! Lo scambio non è stato portato a termine 
   echo 1>&2 Il file \"$2\"  è ora chiamato \"$filescambio\"
   exit 127
 } 

 Quale parte di "scambiare due file" non ti piace?
scambiare.
-- 
By ZeD

 questo potrebbe prevenire una alea
umm
ti dispiacerebbe spiegarmi il termine? google mi mostra solo siti
commerciali (???) e wikipedia parla di comuni greci, diritto civile, giochi
da tavolo, musica e elettronica (mi sembra il meno inappropriato, ma
comunque dice che "Il termine alea indica un segnale non corretto in uscita
da un circuito logico, prodotto eventualmente dai ritardi di propagazione
dei segnali elettrici all'interno del circuito stesso." e mi sembra ad un
livello un po' più basso di quello che m'aspetto)
-- 
By ZeD

 un programma che consentisse di impostarlo.
Certo che esiste, un editor esadecimale che scrive 
direttamente sulle strutture del filesystem.

 Non hai specificato uno schema
ahhh, ok, non ti seguivo più
-- 
By ZeD

 
]zac[
Le virgolette sono utili, per esempio, nei casi in cui si preveda la 
possibilit� di fare un test/confronto con una stringa che contenga spazi 
(per esempio il percorso di un file, opzioni della commanda line, ecc.), e 
in altri casi simili in cui si vuole delimitare con sicurezza una stringa.
Non usarle mai o usarle sempre � una pessima idea.

 Non usarle mai o usarle sempre è una pessima idea.
dimmi un "contro" all'usarle sempre.
l'unica cosa che mi puo' venire in testa è voler "preparare" più parametri
per un comando in una stringa e poi invocare il comando passando la stringa
con gli apici
qualcosa come
$ PARAMS="-l -a"
$ ls "$PARAMS"
ls: invalid option -- ' '        
Usare `ls --help' per ulteriori informazioni.
$ ls $PARAMS
[...va...]
ma IMHO questo è più un errore di "programmazione" di chi ha scritto PARAMS
che dell'uso delle virgolette.
-- 
By ZeD