我正在尝试清空某个文件夹下的大量文件。
>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