我想编写一个shell脚本来搜索和删除目录中的所有非文本文件..
我基本上cd进入我想在脚本中迭代的目录并搜索所有文件。
- 这是我不能做的部分 -
如果文件是文本文件,我想检查if语句。 如果不是我想删除它 否则继续
由于
PS顺便说一句,这是在linux中
我认为文件是“文本文件”,当且仅当其名称与shell模式*.txt
匹配时。
答案 0 :(得分:4)
file
程序在传递确定包含文本格式的文件名时始终输出单词“text”。您可以使用grep测试输出。例如:
find -type f -exec file '{}' \; | grep -v '.*:[[:space:]].*text.*' | cut -d ':' -f 1
我强烈建议在删除之前打印出要删除的文件,直到将输出重定向到文件然后执行:
rm $(<filename)
查看“文件名”的内容后。并且要注意带有空格的文件名,如果你有这些文件名,事情可能会更多地涉及。
答案 1 :(得分:0)
使用相反的,除非if语句是强制性的:
find <dir-path> -type f -name "*.txt" -exec rm {} \;
恰恰相反的是为你练习。提示:它出现在-name之前。
关于如何定义“文本文件”,您的问题很模糊,我认为这只是一个扩展名为“.txt”的文件。
答案 2 :(得分:0)
find . -type f ! -name "*.txt" -exec rm {} +;