Scripting
使 ls 在輸出中區分腳本和二進製文件
是否可以
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 }