2016-04-23 7 views
14

Ich bin mit der cli aws die Dateien in einem s3 Eimer zur Liste mit dem folgenden Befehl (documentation):Wie nur Dateien von aws s3 ls Befehl anzuzeigen?

aws s3 ls s3://mybucket --recursive --human-readable --summarize 

Dieser Befehl gibt mir die folgende Ausgabe:

2013-09-02 21:37:53 10 Bytes a.txt 
2013-09-02 21:37:53 2.9 MiB foo.zip 
2013-09-02 21:32:57 23 Bytes foo/bar/.baz/a 
2013-09-02 21:32:58 41 Bytes foo/bar/.baz/b 
2013-09-02 21:32:57 281 Bytes foo/bar/.baz/c 
2013-09-02 21:32:57 73 Bytes foo/bar/.baz/d 
2013-09-02 21:32:57 452 Bytes foo/bar/.baz/e 
2013-09-02 21:32:57 896 Bytes foo/bar/.baz/hooks/bar 
2013-09-02 21:32:57 189 Bytes foo/bar/.baz/hooks/foo 
2013-09-02 21:32:57 398 Bytes z.txt 

Total Objects: 10 
    Total Size: 2.9 MiB 

Dies ist jedoch meine gewünschte Ausgabe:

a.txt 
foo.zip 
foo/bar/.baz/a 
foo/bar/.baz/b 
foo/bar/.baz/c 
foo/bar/.baz/d 
foo/bar/.baz/e 
foo/bar/.baz/hooks/bar 
foo/bar/.baz/hooks/foo 
z.txt 

Wie kann ich das Datum, die Uhrzeit und die Dateigröße, um zu zeigen, nur die Dateiliste weglassen?

Antwort

23

Sie können dies nicht nur mit dem Befehl aws tun, aber Sie können es leicht zu einem anderen Befehl leiten, um den Teil zu entfernen, den Sie nicht möchten. Sie müssen auch das Flag --human-readable entfernen, damit die Ausgabe leichter funktioniert, und das Flag --summarize, um die Zusammenfassungsdaten am Ende zu entfernen.

starten:

aws s3 ls s3://mybucket --recursive | awk '{print $4}' 

Edit:

aws s3 ls s3://mybucket--recursive | awk '{$1=$2=$3=""; print $0}' | sed 's/^[ \t]*//' 
+0

Teilweise korrekte Antwort - es wird nicht funktionieren, wenn ein Leerzeichen im Dateinamen ist. Auch 'awk' {print $ 5} ', nicht $ 4' –

+3

@MichalGasek Wenn Sie die '--human-lesbar'-Flagge wie ich angegeben entfernen, dann ist es $ 4, nicht $ 5. –

+0

Richtig, es ist dann 4 $. Es sollte immer noch mit Leerzeichen in Dateinamen umgehen ... sonst kommen Überraschungen auf. –

5

Ein einfacher Filter wäre:

aws s3 ls s3://mybucket --recursive | perl -pe 's/^(?:\S+\s+){3}//' 

Dies entfernt das Datum, die Leerzeichen in Dateinamen zu berücksichtigen Zeit und Größe. Verließ nur den vollständigen Pfad der Datei. Es funktioniert auch ohne das rekursive und es sollte auch mit Dateinamen arbeiten, die Leerzeichen enthalten.

0

einfache Weise

aws s3 ls s3://mybucket --recursive --human-readable --summarize|cut -c 29- 
+0

derzeit, für mich,' aws s3 ls' Ausgänge, so dass Sie auf '-c32', nicht' -c29' schneiden möchten; nicht sicher, ob es sich um meine Daten oder eine Änderung im Ausgabeformat handelt. (Ich habe keine Unterordner.) Dies gilt für "- menschenlesbar" oder einfache Standardausgabe; Spalten sind der gleiche Ort. Aber in diesem Fall brauchen wir keine Lesbarkeit.Und in beiden Fällen sollten Sie das '--summarize' weglassen. Kurz gesagt, 'aws s3 ls s3: // mybucket | cut -c32-'(und' --recursive' nur wenn gewünscht) – michael

+0

Beachten Sie, dass alle anderen Antworten, die auf Leerzeichen basieren (awk, cut, whatever), nicht funktionieren, wenn Leerzeichen in den Dateinamen vorhanden sind . – michael

0

Einfacher Befehl würde

aws s3 ls s3://mybucket --recursive --human-readable --summarize |cut -d ' ' -f 8 

sein, wenn Sie den Zeitstempel benötigen, nur Befehl Feldwerte aktualisieren.

Verwandte Themen