Scripting

使 ls 在輸出中區分腳本和二進製文件

  • July 8, 2014

是否可以ls將可執行腳本與實際編譯的二進製文件區分開來?

權限通常是相同的 ( +x),並且兩者都有ls -F一個星號後綴 ( *),因此很難將它們區分開來。我有一個腳本來設置 的顏色ls,但它依賴於文件是否可執行,因此它們顯示相同:

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

我不想依賴副檔名,因為很多這些文件都沒有它。

我想要這個,所以當我看到一些奇怪的錯誤消息並想“是什麼程式碼導致的?”時,我知道它對文件是否安全cat

如果沒有標準解決方案,那麼file在一個通用函式中解析 , 的輸出並插入一些獨特的標記呢?或者那會太慢ls嗎?

您需要查看文件的內容以區分二進製文件和腳本。ls不會這樣做,它只查看文件名和元數據(類型、權限等)。

這是一個粗略的解析器,用於file以不同的方式為腳本和二進製文件著色。它的作用類似於ls -d;添加元數據需要一個需要更直接方法的修補工作(例如在 Perl 或 Python 中);用於lsx somedir/*列出目錄的內容。假定文件名不包含換行符或冒號(您可以使用選項更改:其他字元串的分隔符)。-F``file

lsx () {
 file -iN -- "$@" |
 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 '\033[%sm%s\033[0m\n' "$color" "$name"
 done
}

引用自:https://unix.stackexchange.com/questions/55019