GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Lassen Sie Ls Skripte von Binärdateien in der Ausgabe unterscheiden?

Ist es möglich, ls zu erstellen ausführbare Skripte von tatsächlich kompilierten Binärdateien unterscheiden?

Die Berechtigungen sind meistens gleich (+x ) und mit ls -F Sie erhalten ein Sternchen-Suffix (* ) für beide, also ist es schwer, sie auseinander zu halten. Ich habe ein Skript, um die Farben von ls einzurichten , aber es hängt davon ab, ob die Datei ausführbar ist oder nicht, also werden sie gleich angezeigt:

BG='01;32'  # green
EX="ex=$BG" # file with execute permission

Ich möchte mich nicht auf die Erweiterung verlassen, da so viele dieser Dateien sie nicht haben.

Ich möchte das, damit ich, wenn ich eine bizarre Fehlermeldung sehe und denke:„Welcher Code hat das verursacht?“, weiß, ob es sicher ist, cat zu verwenden oder nicht die Datei.

Wenn es keine Standardlösung gibt, was ist mit dem Parsen der Ausgabe von file , in einer gemeinsamen Funktion, und das Einfügen eines Unterscheidungsmerkmals? Oder wäre das viel zu langsam für ls ?

Akzeptierte Antwort:

Sie müssen sich den Inhalt einer Datei ansehen, um zwischen Binärdateien und Skripten zu unterscheiden. ls tut dies nicht, es betrachtet nur Dateinamen und Metadaten (Typ, Berechtigung usw.).

Hier ist ein grober Parser für file das Skripte und Binärdateien unterschiedlich einfärbt. Es verhält sich wie ls -d; das Hinzufügen von Metadaten würde einen Patch-up-Job erfordern, der einen direkteren Ansatz erfordert (z. B. in Perl oder Python); Verwenden Sie lsx somedir/* um den Inhalt eines Verzeichnisses aufzulisten. Es wird davon ausgegangen, dass Dateinamen weder Zeilenumbrüche noch Doppelpunkte enthalten (Sie können den : ändern Trennzeichen für einen anderen String mit -F Option zum file ).

lsx () { file -iN -- "[email protected]" | while IFS=read -r line; do name=${line%%:*}; type=${line#*:} color=0 case $type in application/x-executable*) color='32';; text/x-shellscript*) color='01;32';; application/*zip*) color='31';; esac printf '
Linux
  1. Wie lässt sich Iconv dazu bringen, die Eingabedatei durch die konvertierte Ausgabe zu ersetzen?

  2. Ausgabe umleiten und leiten?

  3. Wie erstelle ich eine Datei in Linux aus dem Terminalfenster?

  4. eine Logdatei erstellen

  5. Wie entferne ich eine Zeichenfolge aus einer Datei über Shell-Skripte?

Bash:In Datei schreiben

Wie man eine Datei unter Linux ausführbar macht

Ausgabe von Sensoren einfärben?

Redundanz aus Ausgabespalten entfernen?

Wie erstelle ich eine .click-Datei aus einer installierten App?

Speichern Sie die Ausgabe eines Befehls vom Debian-Terminal in einer Datei