Wie erhalte ich die genaue Dateigröße und den Dateinamen?

8

Im Moment benutze ich ls -lt /my/directory(siehe unten), dann analysiert PHP die Ausgabe. Aber inkonsistent, weil das Trennzeichen Leerzeichen ist und zwischen zwei Feldern möglicherweise zwei oder mehr Leerzeichen stehen.

Die Lösung gibt nur den Dateinamen und seine Größe aus . Wie kann ich Dateien (mit Platzhalter) und ihre volle Größe in der Befehlszeile auflisten?

Also statt

-rw------- 1 db2inst1 db2iadm1 855658496 Apr 22 02:31 MONTE.0.db2inst1.NODE0000.CATN0000.20120422023005.001

Ich bekomme

855658496 MONTE.0.db2inst1.NODE0000.CATN0000.20120422023005.001
Radek
quelle
6
Analysieren Sie niemals diels Ausgabe . Stattdessen sollten Sie sich fragen, wie Sie die gewünschten Informationen auf robustere Weise direkt mit PHP abrufen können, möglicherweise über StackOverflow.
jw013
Ich mache es auf einem Remote-Server über SSH, so dass ich es nicht direkt in PHP tun kann.
Radek
Wenn Sie können, mounten Sie das Remote-Verzeichnis über sshfs und vergessen Sie das Parsen lsoder die statAusgabe.
Gilles 'SO - hör auf böse zu sein'

Antworten:

19

Wie andere angemerkt haben, ist es bei einer dynamischen Webanwendung viel besser, die PHP-Funktionen für den Zugriff auf die Dateigröße zu verwenden.

Verwenden Sie es jedoch nicht, wenn Sie es durch Ausführen eines Shell-Befehls erhalten möchten ls. Verwenden statSie stattdessen und sagen Sie genau, was Sie wollen:

$ stat -c '%n %s' x.txt
x.txt 12
ckhan
quelle
1
Das -tim ursprünglichen lsAufruf verwendete kann auf diese Weise kaum reproduziert werden.
Manatwork
1
Der vollständige Befehl, den ich verwenden werde, ist ssh root@monte stat -c \'%n %s\' /var/lib/edumate/backup/*MONTE*. Vielen Dank.
Radek
@manatwor: Danke, dass du darauf hingewiesen hast. Müssen dann also einige Sortierungen in PHP vornehmen.
Radek
1
@Radek, dann möchten Sie wahrscheinlich auch %Y(Format der letzten Änderung, Sekunden seit Epoche) zur Formatzeichenfolge hinzufügen .
Manatwork
Der Dateiname enthält einen Zeitstempel, damit ich ihn verwenden kann. Danke für den Kommentar. Ich würde das brauchen, wenn kein Zeitstempel vorhanden wäre.
Radek