Ich verwende Mac OSX und versuche, über die Befehlszeile die Anzahl der Dateien mit demselben Namen zu ermitteln.
Ich habe versucht, den folgenden Befehl zu verwenden:
find ~ -type f -name "*" -print | basename | sort | uniq -d > duplicate_files
Es funktioniert nicht! Wenn ich folgendes mache:
find ~ -type f -name "*" -print > duplicate_files
Dann enthält duplicate_files die Pfade aller meiner Dateien. Ich denke, das Problem liegt bei basename
- es akzeptiert keine Standardeingabe. Ich habe dann folgendes versucht:
basename $(find ~ -type f -name "*" -print) > duplicate_files
aber auch das scheint nicht zu funktionieren. Die Suche im Internet scheint nicht viel Freude zu bereiten. Irgendwelche Gedanken sind herzlich willkommen.
Warum nicht integrierte
find
Funktionen verwenden, um nur den Dateinamen auszugeben:(nimmt GNU an
find
) oder zumindest so etwas:basename
kann nicht über Pipe lesen oder mehrere Dateien gleichzeitig verarbeiten.ps. Sie müssen nicht angeben,
-name '*'
ob Sie alle Dateien auflisten möchten. Dies ist eine Standardoption.quelle
basename: unknown primary or operator
. Vielen Dank für den Tipp auf-name "*"
-printf
sogar in der Posix-Manpage sehen. Über den Fehler mit dem zweiten Weg ist es Ursache für Tippfehler in meiner Antwort. Fest. Könnten Sie es bitte noch einmal versuchen?-printf
bekomme ich die-printf: unknown primary or operator
. Auch als ich das Unix in einem Nutshell-Nachschlagewerk überprüft habe, wird es als GNU / Linux-Option aufgeführt - sagt nichts über OSX ausman find
in Ihrer Konsole :)Dies scheint für mich unter OSX zu funktionieren:
quelle
+
im Befehl?-a
Option hinzufügen , um auch diesen Fall abzudecken.Alternativen (setzt keine neue Zeile in den Dateinamen voraus):
quelle
Sie können
xargs
mit verwendenbasename
, um die gewünschte Ausgabe zu erhalten, wie folgt:quelle
Mit einer neueren Version
bash
, die assoziative Arrays verarbeitet, werden im Folgenden zusätzlich Pfadnamen mit eingebetteten Zeilenumbrüchen behandelt:Dies verwendet kein externes Dienstprogramm.
quelle