Найти большие файлы и очистить их - PullRequest
2 голосов
/ 27 января 2020

найдут ли следующие файлы больших журналов (более 1 ГБ) в каталоге / opt и очистят их?

find /opt/ -type f -size +1G -exec cat > /dev/null {} \;

спасибо.

Ответы [ 3 ]

3 голосов
/ 27 января 2020

Если у вас GNU coreutils , вы можете использовать truncate следующим образом:

find /opt/ -type f -size +1G -exec truncate -s0 {} \;
3 голосов
/ 27 января 2020

Это то, что требуется:

find /opt/ -type f -size +1G -exec cp /dev/null {} \;

Перенаправление в вашем коде вызывает cat запись больших файлов в /dev/null.

Возможно, безопаснее добавить name пункт:

find /opt/ -type f -name "*.log" -size +1G -exec cp /dev/null {} \;
1 голос
/ 27 января 2020

проблема, с которой вы сталкиваетесь, заключается в том, что перенаправление (>) является свойством оболочки, тогда как 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).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...