Gibt es eine Möglichkeit, die Anzeige von `.` mit `ls -d` zu überspringen, wenn keine Argumente übergeben werden?

Gibt es eine Möglichkeit, die Anzeige von `.` mit `ls -d` zu überspringen, wenn keine Argumente übergeben werden?

Ich habe die Ergebnisse eines Befehls, der an eine findgesendet wird . Wenn keine Dateien übereinstimmen, erhalte ich:xargsls -d

.

als meine einzige Ausgabe, da standardmäßig ls -dFolgendes angezeigt wird:

.

..., wenn keine (Dateiname)-Argumente angegeben sind. Gibt es eine Möglichkeit, ls -dwegzulassen ., wenn keine Argumente übergeben werden, und einfach keine Ausgabe anzuzeigen?

Aktualisieren: Man kann Sie einfach nicht davon überzeugen, ls -dFolgendes nicht anzuzeigen .:

.

ls -d -A\                # Skip implied
   --hide=.\             # No, really, skip implied
   --ignore=.            # I mean it, damn it!

.

:)

Antwort1

Die Verwendung xargszusammen mit findist sooo 80er …

Rufen Sie zB auf:

find . -type d -exec ls -d {} + 

und der Befehl ls wird nie ohne Argumente aufgerufen.

Die Execplus-Funktion wurde find1989 von David Korn für SVr4 hinzugefügt.

Antwort2

Du hast getaggt, daher verwenden Sie wahrscheinlich GNU xargs, das über diese Option verfügt:

-r, --no-run-if-empty
    If the standard input does not contain any nonblanks, do not run the command. 

Bei wird gar nicht erst gestartet, wenn find ... | xargs -r ls -dnichts übereinstimmt.lsfind

findkönnte dennoch explizit übereinstimmen .. Um das zu vermeiden, fügen Sie ! -name .dem Suchausdruck etwas hinzu. Oder verwenden Sie -mindepth 1(in GNU find), um zu verhindern, finddass einer der in der Befehlszeile angegebenen Pfade übereinstimmt.

(Ich habe keine Ahnung, wie man lses selbst ignorieren kann ..)

verwandte Informationen