我有这样的结构:
Father:
├───Charlie
│ └───lang.log
├───Ava
│ └───lang.log
├───Sophia
│ └───lang.log
...
我想清理这个计划。我尝试:
cat /dev/null > Father/*/lang.log
但是我有这个错误:
-bash:* / lang.log:歧义重定向
如何同时清空所有文件?也许只有一个命令。
POSIX解决方案,基本:
find Father/ -type f -name lang.log -exec sh -c 'true > "$1"' sh {} \;
… -exec true > {} \;
将无法正常工作,因为需要重定向,所以需要内壳。请注意,外壳部分不是sh -c 'true > {}'
,此版本将存在缺陷。
POSIX解决方案,sh
如果有很多匹配的文件,它产生的进程更少,因此应该更快。
find Father/ -type f -name lang.log -exec sh -c 'for f; do true > "$f"; done' sh {} +
如果有truncate
,则可以采用许多操作数(truncate
POSIX不需要注释):
find Father/ -type f -name lang.log -exec truncate -s 0 -- {} +
--
这在这里是多余的,因为在这种特殊情况下,来自的所有路径都find
必须以开头Father/
,因此没有任何可能伪装成选项的风险。但是,一般而言,使用动态--
生成的操作前操作数是一种好习惯。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句