ls Befehl frage

Lars85

Member
Servus zusammen,

ich schreibe gerade ein Webinterface für Css Server was über ssh2 läuft.

Bei Debian Leny mache ich das mit:

ls -l --group-directories-first

Da werden als erstes die Ordner und dann alle Dateien aufgelistet aber ich konnte nirgend finden wie es bei FreeBSD 8.2 geht.

Kennt da wer solch einen Befehl?

Liebe Grüße Lars
 
Zuletzt bearbeitet:
Hallo,
wenn du das mit ls nicht lösen kannst ist vielleicht find eine Möglichkeit für dich.
Erst
Code:
find /verzeichnisname -type d
für alle Verzeichnisse.
Dann
Code:
find /verzeichnisname -type f
für alle Dateien.
Wenn du sowieso im Programm mit den Daten arbeitest ist das Zusammenlegen der beiden Infos sicherlich kein Problem.

Grüße
Mario
 
Danke für deine Antwort,

jedoch muss es mit einem befehl gehen da ich die ausgabe in der Shell dann in eine tabelle Konvertiere.

unter /home/css/css_server_id_1 gebe ich ein "ls -l --group-directories-first"

dann bekomme ich diese auflistung:

PHP:
drwxr-xr-x 5 css_1 root    4096 26. Okt 17:38 css
drwxr-xr-x 5 css_1 root    4096 26. Okt 17:39 hl2
drwxr-xr-x 2 css_1 root    4096 26. Okt 17:39 Steam
-rwxr--r-- 1 css_1 root 3513408 26. Okt 17:39 hldsupdatetool.bin
-rwxr-xr-x 1 css_1 root    1410 26. Okt 17:39 InstallRecord.blob
-rw-r--r-- 1 css_1 root    3413 26. Okt 17:39 readme.txt
-rwxr-xr-x 1 css_1 root 5265976 26. Okt 17:39 steam
-r-xr-xr-x 1 css_1 root  358301 26. Okt 17:39 test1.so
-r-xr-xr-x 1 css_1 root  453372 26. Okt 17:39 test2.so
-r-xr-xr-x 1 css_1 root 8306090 26. Okt 17:39 test3.so

und so bräuchte ich die auch bei BSD

1. chmod der Dateien
2. Filetyp (1 ist eine Datei und alles ab 2 und höher ist ein Ordner)
3. besitzer
4. größe der Datei
5. Änderungsdatum
6. Datei oder Ordnername

wenn ich in BSD "ls -lt" eingebe bekomme ich fast das richtige nur es sollen wie gesagt erst die ordner und dann die Daten aufgelistet werden :)

PHP:
drw-r--r--  2 root   wheel  512 Dec 26 14:40 test_ordner2
-rw-r--r--  1 root   wheel    0 Dec 26 14:34 test_datei1
drw-r--r--  2 root   wheel  512 Dec 26 14:33 test_ordner1
-rw-r--r--  1 admin  wheel  763 Dec 25 04:23 .cshrc
-rw-r--r--  1 admin  wheel  261 Dec 25 04:23 .login
-rw-r--r--  1 admin  wheel  171 Dec 25 04:23 .login_conf
-rw-------  1 admin  wheel  383 Dec 25 04:23 .mail_aliases
-rw-r--r--  1 admin  wheel  343 Dec 25 04:23 .mailrc
-rw-r--r--  1 admin  wheel  789 Dec 25 04:23 .profile
-rw-------  1 admin  wheel  288 Dec 25 04:23 .rhosts
-rw-r--r--  1 admin  wheel  984 Dec 25 04:23 .shrc
Gruß Lars
 
Zuletzt bearbeitet:
1. chmod der Dateien
2. Filetyp (1 ist eine Datei und alles ab 2 und höher ist ein Ordner)
3. besitzer
4. größe der Datei
5. Änderungsdatum
6. Datei oder Ordnername

Der "Filetyp" hat nichts damit zu tun ob der Eintrag eine Datei ist. In Wirklichkeit handelt es sich um die Anzahl der hard-links auf einen Eintrag. Der muss bei Dateien nicht zwangsläufig 1 sein.

Code:
% echo "Testdatei" > datei1
% mkdir testdir
% ll
total 4
-rw-r--r--  1 ct  ct   10 26 Dez 13:52 datei1
drwxr-xr-x  2 ct  ct  512 26 Dez 13:52 testdir/
% ln datei1 datei2 
% ll
total 6
-rw-r--r--  2 ct  ct   10 26 Dez 13:52 datei1
-rw-r--r--  2 ct  ct   10 26 Dez 13:52 datei2
drwxr-xr-x  2 ct  ct  512 26 Dez 13:52 testdir/
% cat datei2
Testdatei
% cat datei1
Testdatei
%
 
Ja, das wird aber nur angezeigt, wenn Du ls noch die Option "-F" mitgibst.

Warum testest Du nicht einfach auf das "d" in der ersten Spalte? Damit kannst Du alle möglichen Typen voneinander unterscheiden:

ls(1):
Code:
     The file mode printed under the -l option consists of the entry type and
     the permissions.  The entry type character describes the type of file, as
     follows:

           -     Regular file.
           b     Block special file.
           c     Character special file.
           d     Directory.
           l     Symbolic link.
           p     FIFO.
           s     Socket.
           w     Whiteout.
 
das "d" wäre dafür glaube doch am besten, dann müsste ich nurnoch wissen wie ich die sortierung abfrage das "d" immer als 1. angezeigt wird und die restlichen darunter gelistet werden.
 
tree?
Code:
pit@syo ~:-> tree treetest
treetest
├── test1
├── test2
├── test3
├── test4
├── test5
├── testdir1
├── testdir2
│ ├── testest3
│ ├── testlink -> test2
│ ├── testtest1
│ └── testtest2
└── testdir3

3 directories, 9 files
hat auch noch einige andere Optionen, vielleicht ist da was für dich dabei, ich habe das nicht genau genug verinnerlicht, was du möchtest.
Oft genug wird das alte und für mich sehr schöne tree zu Unrecht ignoriert.
 
das "d" wäre dafür glaube doch am besten, dann müsste ich nurnoch wissen wie ich die sortierung abfrage das "d" immer als 1. angezeigt wird und die restlichen darunter gelistet werden.

Also am simpelstens wäre das wie von DSBusr geschrieben in zwei Durchgängen erledigt, wobei Du die Ergbnisse einfach aneinanderhängst und weiterverarbeitest.

In einem Durchgang müsste das z.B. mit awk(1) zu lösen sein. So auf die schnelle hab ich folgendes hinbekommen, wobei ich jetzt nicht weiß wieso der mir da ne Leerzeile reinspuckt:

Code:
% LC_ALL=C ls -l | awk ' /^d/ { print $0 } /^[-bclpsw]/ { files=files "\n" $0 } END { print files } '
drwxr-xr-x  2 root  wheel     512 Dec  8 11:57 defaults/
drwxr-xr-x  2 root  wheel     512 Jul 19  2010 firmware/
drwxr-xr-x  2 root  wheel   31232 Dec  8 01:18 kernel/
drwxr-xr-x  2 root  wheel   31232 Sep 19 15:16 kernel.old/
drwxr-xr-x  2 root  wheel     512 Dec  6 12:27 modules/
drwxr-xr-x  2 root  wheel     512 Feb 14  2011 zfs/

-r--r--r--  1 root  wheel    7681 Dec  8 11:57 beastie.4th
-r--r--r--  1 root  wheel    8192 Dec  8 11:57 boot
-r--r--r--  1 root  wheel     512 Dec  8 11:57 boot0
-r--r--r--  1 root  wheel     512 Dec  8 11:57 boot0sio
...
...
 
tree ist da leider nicht installiert und ich würde gerne nur das installierte nutzen da das die Nutzer dann alles nachinstallieren müssten :)

zu dem awk, das ist schon eher was ich mir vorstelle, nur die leerzeile würde in dem php script einen abbruch erzeugen wenn ich die Ausgabe als String übergebe und parse.

Leider werden Verknüpfungen mit bei den Datein gelistet und nicht als Ordner.

Gruß Lars
 
tree ist da leider nicht installiert und ich würde gerne nur das installierte nutzen da das die Nutzer dann alles nachinstallieren müssten :)

zu dem awk, das ist schon eher was ich mir vorstelle, nur die leerzeile würde in dem php script einen abbruch erzeugen wenn ich die Ausgabe als String übergebe und parse.

Leider werden Verknüpfungen mit bei den Datein gelistet und nicht als Ordner.

Gruß Lars

Wenn Du eh PHP benutzt, wäre es da nicht einfacher das PHP-Script anzupassen und sich den ganzen Vorsortierkram zu sparen?


Die Leerzeile entstand durch das Konstrukt files=files "\n" $0. Andersrum wird die Leerzeile ganz zum Schluss ausgegeben. Wenn Dein PHP-Script aber gar keine Leerzeilen akzeptiert, auch nicht am Ende, dann bleibt nur eine Fallunterscheidung mit if...then...else.

Ob symlinks zu den Verzeichnissen oder Dateien gepackt werden kannst Du dir selber aussuchen indem Du die Selektrionskriterien /^[dl]/ und /^[-bcpsw]/ anpasst. So werden Dateien (d) und Symlinks (l) an den Anfang gestellt:

Code:
% LC_ALL=C ls -l | awk ' /^[dl]/ { print $0 } /^[-bcpsw]/ { if (files=="") { files=$0 } else { files=files "\n" $0 } } END { print files } '
 
Zurück
Oben