【问题标题】:empty the file is not working in find清空文件在查找中不起作用
【发布时间】:2012-08-06 12:41:31
【问题描述】:

我想清空大于 30 MB 的文件。我尝试使用find 命令解决这个问题。

   find . -maxdepth 1 -size +32M -exec cat /dev/null > {} \;

   find . -maxdepth 1 -size +32M -exec echo -n > '{}' \;

但是这两个命令都不会清空文件。相反,它会创建一个{} 文件。

为什么它不清空文件?以及为什么它会创建一个名为 {}? 的文件​​。 find 命令有什么问题?

【问题讨论】:

    标签: linux find


    【解决方案1】:

    解决方案

    在这种情况下你必须使用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 命令内部进行此重定向,而是在它外部进行。

    ( find . -maxdepth 1 -size +32M -exec cat /dev/null )  ===> ( {} \; )
    

    当然是不正确的。您必须在find 执行的命令中进行此重定向。为此,您必须在exec 命令中运行一个新的shell。您可以使用sh -c 进行此操作。

    【讨论】:

      猜你喜欢
      • 2011-07-07
      • 2023-04-06
      • 1970-01-01
      • 2011-01-13
      • 2015-10-26
      • 1970-01-01
      • 2019-08-12
      相关资源
      最近更新 更多