localize um arquivo e trunque-o

2

Estou simplesmente tentando encontrar um único arquivo de log e truncá-lo. Por que isso não funciona?

find ${listener}/tracefiles/${listener}.log -exec cp /dev/null '{}'\;

Isso retorna um erro: find: missing argument to -exec ''

    
por ForeverAlone 08.02.2016 / 17:19

3 respostas

1

Deve haver espaço em branco na frente do ; :

find "${listener}/tracefiles/${listener}.log" -exec cp /dev/null {} \;

Mas não faz sentido chamar find -exec para um único arquivo. Por que você não usa

test -f "${listener}/tracefiles/${listener}.log" &&
    cp /dev/null "${listener}/tracefiles/${listener}.log"
    
por 08.02.2016 / 17:26
1

É muito simples:

find ${listener}/tracefiles -name ${listener}.log -exec truncate -s0 {} \;
    
por 25.07.2018 / 14:50
0

Isso não está funcionando porque você precisa de um espaço antes do \; . Tente isto:

find ${listener}/tracefiles/${listener}.log -exec cp /dev/null '{}' \;

No entanto, essa é uma maneira desnecessariamente complexa de truncar o arquivo. Primeiro de tudo, desde que você aparentemente sabe o caminho exato do arquivo, tudo que você precisa fazer é:

> ${listener}/tracefiles/${listener}.log

Se você estiver usando find para evitar a criação do arquivo, se ele não existir, tente:

[ -e ${listener}/tracefiles/${listener}.log ] && > ${listener}/tracefiles/${listener}.log

Se você realmente precisa de find (se você tiver mais de um arquivo para trabalhar), você pode usar

find ${listener}/tracefiles/${listener}.log -exec sh -c '> {}' \;

Ou até mesmo:

find ${listener}/tracefiles/${listener}.log -exec printf '' {} \;
    
por 08.02.2016 / 17:24

Tags