проблема, с которой вы сталкиваетесь, заключается в том, что перенаправление (>
) является свойством оболочки, тогда как cat
ничего об этом не знает.
возможно, самое простое решение вашей проблемы просто поместив файл-очиститель в небольшой скрипт-обертку (он должен экранировать $
с обратными слешами, чтобы heredo c не расширил $@
и $f
, а вместо этого записал их в скрипт-обертку буквально).
$ cat >/tmp/wrapper-script.sh <<'EOL'
#!/bin/sh
for f in "$@"; do
cat /dev/null > "${f}"
done
EOL
$ chmod +x /tmp/wrapper-script.sh
$ find /opt/ -type f -size +1G -exec /tmp/wrapper-script.sh {} +
скрипт-обертка перебирает все файлы, заданные на cmdline, и очищает их все (обратите внимание на спецификатор +
в вызове find
).