Je možné vytvořit ls
odlišit spustitelné skripty od skutečných zkompilovaných binárních souborů?
Oprávnění jsou většinou stejná (+x
) a pomocí ls -F
získáte příponu hvězdičky (*
) pro oba, takže je těžké je rozlišit. Mám skript pro nastavení barev ls
, ale spoléhá na to, zda je soubor spustitelný nebo ne, takže se zobrazují stejně:
BG='01;32' # green
EX="ex=$BG" # file with execute permission
Nechci se spoléhat na příponu, protože tolik z těchto souborů ji nemá.
Chci to, takže když uvidím nějakou bizarní chybovou zprávu a pomyslím si:„Jaký kód to způsobil?“, vím, zda je bezpečné cat
nebo ne soubor.
Pokud neexistuje žádné standardní řešení, co takhle analyzovat výstup file
, v jedné společné funkci a vložení nějaké rozlišovací značky? Nebo by to bylo příliš pomalé pro ls
?
Přijatá odpověď:
Chcete-li rozlišovat mezi binárními soubory a skripty, musíte se podívat na obsah souboru. ls
to neudělá, dívá se pouze na názvy souborů a metadata (typ, oprávnění atd.).
Zde je hrubý analyzátor pro file
že zabarvuje skripty a binární soubory odlišně. Funguje jako ls -d
; přidání metadat by vyžadovalo záplatovací úlohu, která vyžaduje přímější přístup (např. v Perlu nebo Pythonu); použijte lsx somedir/*
pro výpis obsahu adresáře. Předpokládá se, že názvy souborů neobsahují nové řádky ani dvojtečky (můžete změnit :
oddělovač pro nějaký jiný řetězec s -F
možnost file
).
lsx () { file -iN -- "[e-mail chráněn]" | while IFS=read -r řádek; do name=${line%%:*}; type=${line#*:} color=0 case $type in application/x-executable*) color='32';; text/x-shellscript*) color='01;32';; aplikace/*zip*) color='31';; esac printf
Zástupné znaky:Jak vypsat pouze soubory končící na `.txt` bez použití znaku tečka?
Zavření standardního výstupu (>&-)?
Linux