Bash
查找“損壞”文件,將 if 嵌套在 find 命令中
我試圖在目錄結構中查找“損壞”文件,即文件命令將解釋為“數據”的文件。這是我一直在嘗試執行但失敗的命令:
$ find . -type f -exec if [[ $(file \{} | cut -f2 -d':') == " data" ]] \; then echo " \{} is CORRUPT" \; else echo " \{} is DATA" \; fi \; find: paths must precede expression: then
有誰知道我在這裡做錯了什麼?
我意識到我從未見過參數
if
內部-exec
。甚至可能嗎?基本上,我試圖找到符合該標準的文件(文件會將其報告為“數據”,而不是辨識特定的文件類型),然後列出它們,以便我可以在刪除之前進行分析。
您需要一個 shell 來解釋這些
if/then/else
構造或執行這些管道(儘管您在這裡並不真正需要這些):find . -type f -exec sh -c ' for file do case $(file -b "$file") in (data) printf "%s is CORRUPT\n" "$file";; (*) printf "%s is DATA\n" "$file";; esac done' sh {} +
file
(就像在你的問題中一樣,它在說時會列印“CORRUPT”data
。我不確定這就是你的意思)。無論您做什麼,都不要
{}
像其他人建議的那樣包含在 shell 程式碼中!這將是非常危險的(並且不可移植),例如一個名為的文件$(rm -rf "$HOME")
會使您刪除整個主目錄。