列出/尋找所有子目錄中的所有常規檔案(不包括二進位檔案)

列出/尋找所有子目錄中的所有常規檔案(不包括二進位檔案)

在Linux中。

我知道我可以這樣做find . -type f,但這包括二進位文件,我找不到用 find 排除它們的方法

答案1

file /usr/bin/file例如,在我的系統上的輸出中不包含“二進位”一詞。如果file -i可用,它確實包含“二進制”一詞。如果沒有-i,測試“text”一詞是否存在可能更可靠。

find -type f -exec sh -c "file {} | grep text >/dev/null" \; -print

或者

find -type f -exec sh -c "file {} | grep text >/dev/null" \; -ls

使用-i

find -type f -exec sh -c "file -i {} | grep -v binary >/dev/null" \; -print

使用file只是一個近似值,因為它使用啟發式方法來確定檔案類型,並且對於「二進位」檔案的構成沒有硬性定義。空文件是“二進制”嗎?file說是的。此外,還有很多(通常不常見)的方法可以觸發誤報 ID file

答案2

另一種方法是排除為使用者、群組或其他人設定了執行權限的所有檔案:

find . -type f ! -perm /u=x,g=x,o=x

(如果二進位等於執行權限...)

答案3

顯示沒有可執行權限的所有文件(儘管這不是專門的二進位文件,因此它可能不完全是您所需要的):

ls -l | awk '{if ($1 !~ /x/) print $8}'

答案4

嘗試以下命令:

find . -type f -exec file "{}" \; | grep -vE "ELF|archive"

相關內容