warum funktioniert dieser Befehl mit Pipe nicht?

warum funktioniert dieser Befehl mit Pipe nicht?

Warum find . | catfunktioniert es (das Drucken aller Dateinamen), aber find . | file -inicht das Anzeigen des MIME-Typs aller Dateien?

find .sollte es nicht funktionieren, da es einen Ausgang von und einen Eingang von gibt file -i?

(Tut mir leid, wenn das eine dumme Frage ist, ich bin ein Anfänger in der Verwendung von Bash und konnte keine andere Frage finden, die mir das erklären könnte.)

Antwort1

Mit einer Pipe liest der Befehl auf der rechten Seite die Daten auf seinem Standardeingabekanal. Der fileBefehl erfordert, dass die Dateien Befehlszeilenargumente sind, nicht Daten auf Standardeingabe.

Genau dafür ist der xargsBefehl gedacht: von stdin lesen und die Daten als Kommandozeilenargumente bereitstellen:

find . | xargs file -i

Oder, verwenden Sie die -fOption für file:

find . | file -i -f -

Weitere Einzelheiten finden Sie in den Manpages.

verwandte Informationen