有没有办法在 find -exec 中使用 > 运算符

有没有办法在 find -exec 中使用 > 运算符

我正在尝试清空某个文件夹下的大量文件。

>file或者cat /dev/null > file可以echo "" > file清空文件。 find . -type f -exec blahblah {} \;可以查找文件并对其执行某些操作。

我尝试使用>运算符,find ... -exec但结果与我预期的不同。

有没有办法在命令中使用>运算符find

答案1

你不能直接使用它,因为它会被解释为实际的重定向。你必须在另一个 shell 中包装该调用:

find . -type f -exec sh -c 'cat /dev/null >| $0' {} \;

如果sh是 Bash,你也可以执行以下操作:

find . -type f -exec sh -c '> $0' {} \;

答案2

或者你可以使用以下方法重定向 find 命令的输出流程替代

while IFS= read -r -d '' file
do cat /dev/null > "$file"
done < <(find . type -f print0)

答案3

平行线允许转义>\>

find . -type f|parallel \>{}

或者直接使用read

find . -type f|while read f;do >"$f";done

您不需要-r-d ''或 ,IFS=除非路径包含反斜杠或换行符,或者以 中的字符开头或结尾IFS

答案4

或者,也可以只使用适当命名的truncate命令。

像这样:

truncate -s 0 file.blob

GNU coreutils 版本的truncate 还处理了很多有趣的事情

SIZE 还可以以下列修饰字符之一作为前缀:'+' 增加,'-' 减少,'<' 最多,'>' 至少,'/' 向下舍入为倍数,'%' 向上舍入为倍数。

一个更简单但不太恰当的“命名”方法是

cp /dev/null file.blob

相关内容