如何在不改变所有权/权限的情况下清除子目录中每个文件的内容?

如何在不改变所有权/权限的情况下清除子目录中每个文件的内容?

我可以使用类似以下方法找到文件列表:

find /path/to/files -type f

我可以使用以下任一方法清除单个文件的内容:

> filename

echo -n > filename

cat /dev/null > filename

您可以使用不涉及输出重定向的命令执行类似的操作:

find /path/to/files -type f -exec file '{}' \;

然而这不起作用:

find /path/to/files -type f -exec echo -n > '{}' \;

我似乎无法使用 find 命令-exec| xargs将文件列表导入到这些命令之一中来清除文件。我该怎么做?

答案1

find /path/to/files -type f -exec /bin/sh -c "> '{}'" ';'应该做你想做的事;参见查找(1)有关 exec 如何工作的详细信息,但此调用运行一次命令,并将文件名放在其中{}

您还可以告诉 xargs 仅将单个文件名传递给命令,或者find /path -type f | while read file; do echo -n > "$file"; done在 shell 级别执行此操作。

答案2

只是为了好玩,这里还有另一种选择:

find /path/to/files -type f -exec dd if=/dev/null of={} \;

相关内容