我试图在目录结构中找到“损坏”的文件,即文件命令将解释为“数据”的文件。这是我一直在尝试运行但失败的命令:
$ 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
Run Code Online (Sandbox Code Playgroud)
有谁知道我在这里做错了什么?
我意识到我从未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 {} +
Run Code Online (Sandbox Code Playgroud)
(就像在您的问题中一样,当file说时它会打印“CORRUPT” data。我不确定这就是您的意思)。
无论您做什么,都不要{}像其他人建议的那样包含在 shell 代码中!这将是非常危险的(并且不可移植顺便说一句),因为例如一个名为的文件$(rm -rf "$HOME")会让您删除整个主目录。
| 归档时间: |
|
| 查看次数: |
2530 次 |
| 最近记录: |