Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    11

    spazi in output comando ls

    Ciao a tutti
    faccio una domanda stupida:

    questo è l'output di un banale ls -la su due versioni differenti di redhat

    codice:
    SERVER1 ttyp0 telmon /usr/local/bin$ls -la xtest
    -rwxr-xr-x    1 telmon   telmon       8220 Jul 18  2003 xtest
    codice:
    SERVER2 pts/1 telmon /usr/local/bin$ls -la xtest
    -rwxrwxrwx 1 telmon telmon 8220 Aug 19  2009 xtest

    come vedete nel primo output ho una impaginazione diversa, ci sono degli spazi in più che non ho ne secondo.

    Ho bisogno di allineare l'output del secondo al primo...come posso fare?

    Ho questa necessità perchè devo migrare un applicativo da una versione di linux ad un'altra.
    l'applicativo ha una marea di shell bash che farei volentieri a meno di modificare e in questi script spesso viene utilizzato un ls -la | cut -c.... che chiaramente con un output restituisce lo stesso risultato

  2. #2
    Utente di HTML.it L'avatar di MrX87
    Registrato dal
    Jun 2007
    Messaggi
    500
    Ciao, ho provato a risolvere il tuo problema e sono riuscito ad abbozzare un codice C che prende in input il un file con la redirezione del comando "ls -la" e gestisce gli spazi da aggiungere per otterene un output formattato secondo un altro stardard! Io ho lavorato su Ubuntu 10.04 in versione ancora alfa, e dal comando ls -la ottenevo una roba simile:
    codice:
    totale 24
    drwxr-xr-x  2 thecrow thecrow 4096 2010-03-25 13:11 .
    drwxrwxrwx 75 thecrow thecrow 4096 2010-03-25 13:10 ..
    -rw-r--r--  1 thecrow thecrow    0 2010-03-25 13:11 in.txt
    -rwxr-xr-x  1 thecrow thecrow 7578 2010-03-25 13:11 parsific
    -rw-r--r--  1 thecrow thecrow 1165 2010-03-25 13:10 parsific.c
    Non so perchè ma ottengo delle stringhe composte da 8 sottostringhe, invece quello che hai postato tu conta 9 sottostringhe, quindi...devi fare un cambiamento al mio codice che posto qua sotto:
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main ( int argc, char* argv[] )
    {
    	int vet[9] = {3,1,2,5,1,1,2,1,0};
    	int k, i, max=0, off=0;
    	char string[256];
    	char str[64];
    	int flag=0;
    	FILE *in, *out;
    
        system("ls -la > in.txt");
    
    	in = fopen ("in.txt","r");
    	out = fopen (argv[1],"w");
    
        fscanf(in,"%*s%*s");
    
    	while ( fscanf(in,"%*s %*s %*s %*s %s %*s %*s %*s %*s", str) != EOF ) {
    	    if ( strlen(str) > max )
    	        max = strlen(str);
    	}
    	printf ("%d\n", max);
    
        rewind(in);
    
    	while ( feof(in) != 1 ) {
    
            if ( flag == 1 ) {
    
                for ( i=0; i<9; i++ ) {
                    fscanf(in,"%s", str);
                    if ( feof(in) == 1 ) return 1;
                    fprintf(out,"%s", str);
                    if ( i == 4 ) off = 4 - strlen(str);
                    else off=0;
                    k=0;
                    while ( k < vet[i]+off ) {
                        fprintf(out," ");
                        k++;
                    }
    
                }
                fprintf (out,"\n");
            }
            else {
                fgets (string,256,in);
                fprintf(out,"%s", string);
                flag = !flag;
            }
    	}
    	fcloseall();
    	return 1;
    }
    Il programma funziona da riga di comando, prende automaticamente in input il file in.txt, in quanto lo crea tramite una chiamata a sistema:
    codice:
     system("ls -la > in.txt");
    e poi lo elabora e riscrive il tutto in un nuovo file, passato come parametro, con la nuova formattazione!
    Per avviarlo da terminale ovviamente devi passare il nome del file d uscita!

    Prova a vedere se funziona qualcosa, io ho fatto delle prove e in genere andava, però magari cambiando sistema o facendo delle prove particolari farà qualche capriccio! fammi sapere... ciaoo!
    "Non può piovere per sempre" Il Corvo
    Forza Vigor!

  3. #3
    Credo che usando awk si possa tirare fuori qualcosa di buono. Certo, prima serve una laurea in fisica subnucleare per capire come funziona

  4. #4
    Utente di HTML.it L'avatar di MrX87
    Registrato dal
    Jun 2007
    Messaggi
    500
    bhè si...cmq...sapendo bene awk e bash...sicuramente puoi fare qualcosa di più carino e magari anche di più semplice ed efficiente!
    "Non può piovere per sempre" Il Corvo
    Forza Vigor!

  5. #5
    qualcosa tipo questo?

    codice:
    ls -la|while read a b c d e f g h i l
    do
    echo "$a $b $c $d $e $f"
    done
    
    totale 11420                                                                            
    drwx------ 16 root root 4096 2010-04-01                                                 
    drwxr-xr-x 21 root adm 4096 2010-04-01                                                  
    -rw-r--r-- 1 root root 558 2010-04-01                                                   
    -rw-r--r-- 1 root root 145 2006-08-05                                                   
    -rw------- 1 root root 21385 2010-03-31                                                 
    -rw-r--r-- 1 root root 24 2006-08-05                                                    
    -rw-r--r-- 1 root root 106 2006-08-05                                                   
    -rw-r--r-- 1 root root 226 2006-08-05
    ...
    AMD Phenom II X6 1090T, ASUS M3A78-CM, GTX460 OC 1GB, CentOS 7 & Thinkpad T410 windows & Fairphone FP2

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    11
    mmmm...non ci siamo.
    tutte soluzioni interessanti che richiedono però modifiche agli script.
    il problema è che gli script da modificare sarebbero centinaia e non so neanche dove sono infognati tutti.

    mi occorre qualcosa a livello di sistema

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    11
    Originariamente inviato da _s|n3_
    mmmm...non ci siamo.
    tutte soluzioni interessanti che richiedono però modifiche agli script.
    il problema è che gli script da modificare sarebbero centinaia e non so neanche dove sono infognati tutti.

    mi occorre qualcosa a livello di sistema
    ok ok....la soluzione l'ho trovata....ed è geniale

    cp /server1/bin/ls /server2/bin/ls

    e vai di overwrite

  8. #8
    Utente di HTML.it L'avatar di cacao74
    Registrato dal
    Jan 2005
    Messaggi
    2,570
    curiosita' personale:
    potresti postare l'output dei seguenti comandi relativi a ciascuna macchina ?
    codice:
    $ echo $TERM
    $ echo $TERMCAP
    $ stty --all
    slack? smack!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.