
Ich habe die Ergebnisse eines Befehls, der an eine find
gesendet wird . Wenn keine Dateien übereinstimmen, erhalte ich:xargs
ls -d
.
als meine einzige Ausgabe, da standardmäßig ls -d
Folgendes angezeigt wird:
.
..., wenn keine (Dateiname)-Argumente angegeben sind. Gibt es eine Möglichkeit, ls -d
wegzulassen .
, wenn keine Argumente übergeben werden, und einfach keine Ausgabe anzuzeigen?
Aktualisieren: Man kann Sie einfach nicht davon überzeugen, ls -d
Folgendes nicht anzuzeigen .
:
.
ls -d -A\ # Skip implied
--hide=.\ # No, really, skip implied
--ignore=. # I mean it, damn it!
.
:)
Antwort1
Die Verwendung xargs
zusammen mit find
ist 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 find
1989 von David Korn für SVr4 hinzugefügt.
Antwort2
Du hast getaggtlinux, 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 -d
nichts übereinstimmt.ls
find
find
kö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, find
dass einer der in der Befehlszeile angegebenen Pfade übereinstimmt.
(Ich habe keine Ahnung, wie man ls
es selbst ignorieren kann .
.)