sh script para remover apenas arquivos txt usando o comando find e exec rm me avisa sobre a falta de argumentos para exec

3
find /full/path/dir -name '*.txt' -exec /bin/rm {} \;

Fina em um shell, mas coloque-o em um script sh junto com algumas linhas semelhantes, para executá-lo todas as noites a partir de um cronjob e ele relata:

find: missing argument to '-exec'

em tudo. Eu tentei barras invertidas e aspas nas possivelmente todas as combinações. Como posso fazer isso funcionar?

    
por talkingnews 27.01.2011 / 20:03

3 respostas

2

Você provavelmente tem finais de linha do Windows no seu arquivo de script. Tente executar dos2unix para convertê-los.

Você pode reproduzir este erro em um prompt do shell com:

$ find ... \;^M

Onde você adiciona "^ M" pressionando Ctrl - v Ctrl - m

    
por 27.01.2011 / 20:43
2

Eu não consigo imaginar por que

find /full/path/dir -name '*.txt' -print0 | xargs -0 rm

não funcionaria. Para testar seu cronjob, faça algo assim:

find /full/path/to/dir -name '*.txt' -print0 | xargs -0 >/tmp/logfile

que apenas ecoará o que o xargs excluiria em /tmp/logfile , para que você possa verificá-lo manualmente.

    
por 27.01.2011 / 20:18
1

Esse erro acontece quando o find não corresponde a nenhum arquivo com esse critério, então tenta executar o rm com uma pilha vazia e retorna esse erro.

A sugestão de Phil é incrível, por favor, marque-o! :)

    
por 27.01.2011 / 20:20