find: argumento ausente para '-exec'

0

este é o meu primeiro post, já que sou completamente novo no mundo da programação. Basicamente eu estou tendo uma classe UNIX e tenho uma tarefa me pedindo para verificar o tamanho dos arquivos regulares no meu diretório home para tamanhos de arquivo maiores ou iguais a 1 KB, então faça backup deles para um arquivo compactado. Eu tenho que usar extensão .bak para o arquivo compactado e, em seguida, limpá-los. Eu tenho isso até agora:

find . -maxdepth 1 -type f -size +1k -exec gzip -k -S.bak'{}'\;-exec cp'lab4.bak'/IFT383ss16/Labs/ \;   
find: paths must precede expression  
Usage: find [-H] [-L] [-P] [path...] [expression]

Tentando ver se consigo alguma ajuda aqui, talvez algumas sugestões?

    
por Jose Cid 15.06.2016 / 04:31

1 resposta

1

Parece-me que você está sendo avarento com personagens do espaço.

Você precisa de um espaço antes do {} , e antes e depois do \; e depois do cp e 'lab4.bak' . Você não precisa de aspas simples em torno do {} .

O segundo -exec ... provavelmente deve ser -exec cp {}.bak /IFT383ss16/Labs/ \;

Tente isto:

find . -maxdepth 1 -type f -size +1k \
    -exec gzip -k -S.bak {} \; \
    -exec cp {}.bak /IFT383ss16/Labs/ \;   

Isso tudo poderia estar em uma linha. Eu usei \ s no final das duas primeiras linhas para torná-lo mais legível (o shell irá ler as linhas com um \ como o último caractere não espacial como sendo continuado na próxima linha). Ele funciona da mesma forma em uma linha, se você remover o% de fim de linha\ se juntar as linhas.

BTW, você deseja copiar os arquivos .bak ou movê-los? Talvez use mv em vez de cp .

    
por 15.06.2016 / 05:35