2016-08-03 7 views
2

In bash Rückkehr kann ich den Basisnamen (Name ohne Pfad) der gefundenen Dateien wie diese:Dateien finden Basisnamen und Größe

find . -exec basename {} \; 

und ich kann die Dateigröße wie diese:

find . -exec ls -l {} \; | awk '{print $5}' 

aber ich muss den Basisnamen und die Dateigröße getrennt durch ein Leerzeichen erhalten.

Wie kombiniere ich diese beiden Befehle korrekt mit einem Suchvorgang? Dieser Code funktioniert nicht:

find . -exec basename {} \; -exec ls -l {} | awk '{print $5}' \; 

awk: can't open file ;find: 
source line number 1 
-exec: no terminating ";" or "+" 

Ich versuche, einen schnellen doppelte Datei-Finder zu erstellen. Mit dieser Liste würde ich eine Sortierung durchführen und dann uniq verwenden, um alle Duplikate zu finden, die die Kriterien verwenden: a duplicate = selbe "Basisname" & gleiche "Größe" (ohne eine MD5-Prüfung).

Bisher mache ich nur diese erste Liste, wo ich syntaktisch (und vielleicht programmgesteuert) aufgehängt bin. Bitte lassen Sie mich wissen, wenn Sie eine bessere Methode haben. Es versucht, es mit den einfachsten Bash-Befehlen funktionieren zu lassen, so dass es sowohl auf Linux als auch auf Mac läuft, ohne etwas zu installieren.

Antwort

3

GNU Systeme

Für GNU-Systemen verwenden Sie diesen Befehl

find . -printf '%k\t%f\n' 

Ihre Ausgabe der Größe jeder Datei und Basisnamen zu erhalten.

  • %k druckt Größe der Datei in kb
  • \t wörtliche Tabulatorzeichen
  • %f druckt Dateinamen mit führenden Verzeichnispfad entfernt
  • \n wörtliche Newline-Zeichen

OSX

Für OSX, benutze th ist ein Befehl, da das Argument -printf nicht direkt unterstützt wird.

find . -exec bash -c 'printf "%s\t%s\n" $(stat -f " %z" "$1") "$(basename "$1")"' - {} \; 
+0

Vielen Dank für Ihre Antwort, aber OSX verwendet keine GNU-Dienstprogramme, daher wird es nicht für dieses plattformübergreifende Skript funktionieren. Der Befehl find ist auf das begrenzt, was in der von FreeBSD verwendeten Version von find verfügbar ist. Mehr Infos hier: http://stackoverflow.com/questions/752818/find-lacks-the-option-printf-now-what – Kevvvin

+1

Makellos !!! Hervorragende Codierung! Perfekt! – Kevvvin

+1

Um Ihre Frage zu osx-Version zu beantworten, muss ich dies als ein Dienstprogramm für Menschen, die Laufwerke von Kamera-Aufnahmen erstellen, die alle auf verschiedenen Versionen von OSX arbeiten, so dass es ziemlich unabhängig davon sein muss. Die Idee dahinter ist, dass sie, ohne etwas anderes zu installieren, ein kleines Bash-Programm im Stammverzeichnis eines Laufwerks ausführen könnten, das alle Dateien auf dem Laufwerk analysiert und ihnen sagt, ob es Dupletten in Dateiname gibt. Wenn es solche Arten von Duplikaten gibt, haben sie es versaut, die Footage-Laufwerke zu erstellen (jeder Kameramaster sollte eindeutig sein). – Kevvvin

Verwandte Themen