linux – 清空文件找不到工作
发布时间:2020-12-14 00:28:33 所属栏目:Linux 来源:网络整理
导读:我想清空超过30 MB大小的文件.我尝试使用find命令解决这个问题. find . -maxdepth 1 -size +32M -exec cat /dev/null {} ; 和 find . -maxdepth 1 -size +32M -exec echo -n '{}' ; 但是这两个命令都不会清空文件.相反,它会创建一个{}文件. 为什么它不会清
我想清空超过30 MB大小的文件.我尝试使用find命令解决这个问题.
find . -maxdepth 1 -size +32M -exec cat /dev/null > {} ; 和 find . -maxdepth 1 -size +32M -exec echo -n > '{}' ; 但是这两个命令都不会清空文件.相反,它会创建一个{}文件. 为什么它不会清空文件?以及为什么它会创建一个名为{}的文件? 解决方法
解
在这种情况下你必须使用sh -c: -exec sh -c "> {}" ; 用法示例 准备文件: $echo hello > a1 $cp a1 a2; cp a1 b1; cp a1 b2 $ls -l total 16 -rw-r--r-- 1 ic ic 6 6. Aug 14:45 a1 -rw-r--r-- 1 ic ic 6 6. Aug 14:45 a2 -rw-r--r-- 1 ic ic 6 6. Aug 14:45 b1 -rw-r--r-- 1 ic ic 6 6. Aug 14:45 b2 执行命令: $find . -name 'a*' -exec sh -c '> {}' ; 检查结果: $ls -l total 8 -rw-r--r-- 1 ic ic 0 6. Aug 14:45 a1 -rw-r--r-- 1 ic ic 0 6. Aug 14:45 a2 -rw-r--r-- 1 ic ic 6 6. Aug 14:45 b1 -rw-r--r-- 1 ic ic 6 6. Aug 14:45 b2 $cat a1 $cat b1 hello 如您所见,以a开头的文件现在为空;和其他文件不是. 说明 当你做出类似的东西时 find . -maxdepth 1 -size +32M -exec cat /dev/null > {} ; 你不是在exec命令中,而是在exec命令之外进行此重定向. ( find . -maxdepth 1 -size +32M -exec cat /dev/null ) ===> ( {} ; ) 当然这是不正确的.您必须在find执行的命令中进行此重定向.为此,您必须在exec命令中运行新shell.你用sh -c做这个. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容