2012-03-23 10 views
12

Ho notato molti file nella mia directory, chiamati "sedAbCdEf" o simili.Perché sed lascia molti file in giro?

  • Perché crea questi file?
  • Questi hanno alcun valore dopo l'esecuzione di uno script?
  • Posso inviare questi file in un'altra posizione, ad es. /tmp/?

Aggiornamento:

ho controllato gli script fino a quando ho trovato uno che rende i file. Ecco alcuni esempi di codice:

#!/bin/bash 
a=1 
b=`wc -l < ./file1.txt` 
while [ $a -le $b ]; do 
    for i in `sed -n "$a"p ./file1.txt`; do 
     for j in `sed -n "$a"p ./file2.txt`; do 
      sed -i "s/$i/\nZZ$jZZ\n/g" ./file3.txt 
      c=`grep -c $j file3.txt` 
      if [ "$c" -ge 1 ] 
      then 
       echo $j >> file4.txt 
       echo "Replaced "$i" with "$j" "$c" times ("$a"/"$b")." 
      fi 
       echo $i" not found ("$a"/"$b")." 
      a=`expr $a + 1` 
     done 
    done 
done 
+1

perché pensi che sia collegato a sed? ad eccezione del nome file, ovviamente, – cctan

+0

Suppongo che possa essere creato da qualcos'altro, tuttavia, li trovo dopo aver eseguito gli script BASH e gli script BASH contengono 'sed'. Tutti i nomi dei file iniziano con "sed", seguito da alcune lettere casuali. – Village

+1

puoi pubblicare lo script di bash? Sto cercando una parte che dice 'blabla> sedAbCdEf'? – cctan

risposta

11
  • Perché si crea questi file?

sed -i "s/$i/\nZZ$jZZ\n/g" ./file3.txt

l'opzione -i rende sed memorizza l'uscita stdout in un file temporaneo.
Al termine di sed, verrà rinominato questo file temporaneo per sostituire l'originale file3.txt.
Se qualcosa non funziona quando sed è in esecuzione, questi file temporanei sedAbCdE verranno lasciati lì.

  • Questi hanno alcun valore dopo l'esecuzione di uno script?

Il tuo vecchio file non è stato toccato. Di solito no.

  • Posso inviare questi file in un'altra posizione, ad es./Tmp /?

Sì, è possibile vedere sopra.

Modifica: vedere this per ulteriori letture.

+0

[Il codice sorgente per GNU sed-4.2] (http://stackoverflow.com/a/9834294/4279) come ho capito dice che è impossibile inviare questi file in un'altra posizione – jfs

+0

@JFSebastian Penso che Village significasse dopo tutto lo script ha smesso di funzionare, può confermare OP? – cctan

1

Questo può essere che, dal momento che hai usato le azioni troppo sed, e in un modello in loop, sed può fare file tmp che non vengono rimossi correttamente.

Sed creates un-deleteable files in Windows

Date un'occhiata a questo post, sed avere un tale problema da segnalare prima. Il modo migliore è creare uno script che rimuove i file o creare una funzione che rimuova tutti i file che cancella tutti i file con nome che inizia con sed, (^ sed *) come cosa.

5

Se si utilizza l'opzione -i (significa apportare modifiche sul posto) sed scrive in un file temporaneo e quindi lo rinomina nel file. Pertanto, se l'operazione viene interrotta, il file rimane invariato.

È possibile vedere quali file vengono aperti, rinominati con strace:

$ strace -e open,rename sed -i 's/a/b/g' somefile 

Nota: somefile viene aperto in sola lettura.

Sembra che non ci sia modo di sovrascrivere la directory di backup. GNU sed scrive sempre nella directory del file (± symlink). Da sed/execute.c:

if (follow_symlinks) 
    input->in_file_name = follow_symlink (name); 
else 
    input->in_file_name = name; 

/* get the base name */ 
tmpdir = ck_strdup(input->in_file_name); 
if ((p = strrchr(tmpdir, '/'))) 
    *(p + 1) = 0; 
else 
    strcpy(tmpdir, "."); 

prefisso sed è codificato:

output_file.fp = ck_mkstemp (&input->out_file_name, tmpdir, "sed"); 
+0

Il file temporaneo deve essere creato nella stessa directory del file ' Alla fine verrà rinominato, altrimenti non si può essere sicuri che la rinomina funzioni. 'sed' dovrebbe cancellare i suoi file temporanei se non li usa per sostituire i vecchi file, però. – zwol

Problemi correlati