Nur "normale Dateien" anzeigen per ls

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von Nano, 19.02.2008.

  1. Nano

    Nano Foren As

    Dabei seit:
    02.12.2006
    Beiträge:
    93
    Zustimmungen:
    0
    Hi, folgendes problem :

    Ich brauche ein Array mit allen Dateien ( ordinary Files ) im einem Ordner
    allerdings nur die Name.
    Leider konnte ich in der Manpage und auch bei google keine option finden um nur normale Dateien anzeigen zu lassen, also keine Directorys etc...
    Ich weiss zwar das ich mittels :
    Code:
     ls -l | grep '^-'
    nur die normalen Dateien herausfiltern kann allerdings benötige ich alle weiteren informationen die duch -l mitausgeben werden nicht, sondern nur den Namen der Dateien.

    Die entsprechende Ausgabe speichere ich in einem Array und verarbeite es dort weiter.

    Daher meine Frage gibt es eine möglichkeit nur die Namen der normalen Dateien zu bekommen, oder alternativ die per ls -l | grep '^-' erhaltenen daten im array ohne grösseren aufwand nur auf den namen zu reduzieren
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 Wolfgang, 19.02.2008
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Was meinst du mit normale Dateien?

    Alle Dateien findest du mit find.

    Das gibt dir alle dateien (keine Verzeichnisse oder Links oder dev...)
    Code:
    find /path -type f
      
    Willst du das auf diese eine Ebene beschränken (Keine Unterverz.) nutze zusätzlich -maxdepht 1

    Oder ohne find - etwas umständlich
    Code:
    for i in *; do
        if [ -f "$i" ];
        then
        echo "$i ist Datei";
        fi
    done
    
    Gruß Wolfgang
     
  4. #3 Gott_in_schwarz, 19.02.2008
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    find ist dein freund. mit der option "-type f" werden nur "normale dateien" gesucht/angezeigt.

    Code:
    find /dir/to/files -type f
    oder gleich alle in ein array packen:

    Code:
    file_array=( $(find /dir/to/files -type f -exec printf "{} " \;) )
    edit: huch, zu spät ):

    edit: und mein post gilt natürlich für bash(GNU bash, version 3.2.25). bei anderen shells könnte das mit dem array durchaus anders aussehen...
     
  5. juan_

    juan_ König

    Dabei seit:
    22.01.2004
    Beiträge:
    992
    Zustimmungen:
    0
    Ort:
    Berlin
    ähm, lasse einfach den Parameter von "ls " weg.

    ciao
     
  6. #5 Wolfgang, 19.02.2008
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Damit werden auch Links angezeigt.
    ;)
     
  7. juan_

    juan_ König

    Dabei seit:
    22.01.2004
    Beiträge:
    992
    Zustimmungen:
    0
    Ort:
    Berlin
    Soso.
    Wurde aber aus seinem Post nicht ersichtlich, oder hab ich was verpasst
    ("ohne Directorys etc.."?)?

    ciao
     
  8. #7 Gott_in_schwarz, 19.02.2008
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    jup, siehe:
    Code:
     ls -l | grep '^-'
    das filtert unter anderem auch links raus...
     
  9. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  10. Nano

    Nano Foren As

    Dabei seit:
    02.12.2006
    Beiträge:
    93
    Zustimmungen:
    0
    erstmal vielen dank für die schnelle hilfe, der test per -f hat mein problem gelöst danke,
    find sollte ich aus ristiktionsgründen nicht nutzen
    das weglassen der parameter bei ls würde auch verzeichnis anzeigen die ja nicht mit rein sollen.
    Was ich mit normalen Dateien meinte, die englische bezeichnung ist ordinary File, also keine links verweise ordner etc...

    Eine frage habe ich allerdings noch wenn ich ls -l in ein Array speicher scheint dies unterteilt zu werden , daher vermute ich das die ausgabe von ls -l selbst ein 1 dimensionales array pro zeile ist, stimmt dies ? und wenn ja wie könnte ich dies dann in ein 2 dimensionales array casten um beispielsweise per array[$i][spaltennummer] auf eine variable zuzugreifen wie z.b owner oder timestamp etc
     
  11. #9 Gott_in_schwarz, 19.02.2008
    Zuletzt bearbeitet: 19.02.2008
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    also erstmal: nein, das ist kein einzeiliges arrary. das ist einfach nur eine in spalten unterteilte textausgabe, wobei der "spaltenseparator" (:s) hier das leerzeichen ist. dieses hier:
    Code:
    arr=( $(ls -l) )
    würde jeden string, der durch newline/whitespace char "alleine" steht als einzelnes element in das array hinzufügen. man könnte auch folgendes tun:
    Code:
    arr=( bla blub
    foo bar hihi
    x )
    wie du siehst werden einfach die teile, die "zusammen kleben" (also nicht von whitespace/newline zeichen "unterbrochen" werden) als einzelne array-elemente initialisiert. mehr nicht. das mit dem mehrdimensionalen array, hm, also ich weiß nicht, ob die bash das kann. dieser code hier:
    Code:
    i=0
    ls -l|while read line; do
       arr[i]=( "$line" )
       ((i++))
    done
    produziert die fehlermeldung: "cannot assign list to array member", was für mich so aussieht, als ob die bash keine mehrdimensionalen arrays unterstützt. aber ich könnte natürlich auch einfach einen syntax-fehler begangen haben. btw: der code würde eh nicht wirklich "funktionieren", da ein gepipetes kommando in einer neuen shell ausgeführt wird und somit das array für die mutter-shell garnicht "sichtbar" wäre... (oder gibts da 'nen gscheiten work-a-round?)

    ANYWHO, nimm lieber awk um solche "spaltenbasierten" ausgaben zu parsen. (anstatt alles in arrays reinzuprügeln...)
     
Thema: Nur "normale Dateien" anzeigen per ls
Besucher kamen mit folgenden Suchen
  1. ls nur dateien

    ,
  2. ls unix nur namen

    ,
  3. ls ohne ordner

    ,
  4. mit ls nur dateien anzeigen,
  5. ls nur files,
  6. linux ls nur dateien
Die Seite wird geladen...

Nur "normale Dateien" anzeigen per ls - Ähnliche Themen

  1. Passwort und Namen eines normalen Benutzers verändern

    Passwort und Namen eines normalen Benutzers verändern: Guten Abend, Linux-Fans! Ich habe zwei Fragen: Wie verändere ich über das Terminal das Passwort eines Benutzers (also, meines eigenen) ? Wie...
  2. Handy als stink normales Modem nutzen?

    Handy als stink normales Modem nutzen?: Hallo Unixboard'ler, ich mochte mit meinem Laptop über mein Handy mein Modem zu Hause anrufen (klingt einfach). das Szenario: *getty ->...
  3. google earth als normaler nutzer

    google earth als normaler nutzer: hallo leute, ich habe google earth installiert und war so dumm es gleich vom loki aus zu starten, somit habe ich es als root das erste mal...
  4. Ivman mounten als normaler Benutzer

    Ivman mounten als normaler Benutzer: Servus zusammen, ich wollt heute mal Ivman ausprobieren, da mir das selbermounten allmählich zu lästig wurde. Die Installation und das Starten...
  5. Privoxy als normaler User ausführen

    Privoxy als normaler User ausführen: Hi, Ich habe auf openSuSE 10.2 x86_64 Privoxy 3.0.5 installiert. Leider kann ich Privoxy nur als root mit dem Befehl rcprivoxy start starten....