Não encontrado argumento em -exec [duplicado]

0

Eu tenho esse problema, estou tentando produzir uma lista de filmes sem os nomes dos diretórios no arquivo, mas eu tenho um bug, o argumento não é encontrado no -exeс , abaixo está o código

$ find . -name "*.avi" -o -name "*.mkv" -exec basename \{} \ > ~/Bash/test/rm/films.txt
    
por Дмитрий Смирнов 26.02.2018 / 17:26

2 respostas

3

Tente isso:

$ find . \( -name "*.avi" -o -name "*.mkv" \) -exec basename {} \; > ~/Bash/test/rm/films.txt
    
por 26.02.2018 / 17:30
4

Existem dois erros no seu comando.

  1. \{} deve ser {}

  2. O \␣ (barra invertida + espaço) deve ser \; ou ';' .

O -exec option / predicate de find precisa saber onde o comando que ele executa termina. É dito isso pelo ; no final (que precisa ser citado para protegê-lo do shell).

Você não precisa escapar ou citar {} .

Pode haver alguns problemas com precedência também. Você basicamente diz

condition OR condition AND run-this-command

que é ambíguo. Seria melhor dizer

(condition OR condition) AND run-this-command

Isso faz isso:

find . -type f '(' -name '*.avi' -o -name '*.mkv' ')' \
    -exec basename {} ';' > ~/Bash/test/rm/films.txt

Eu também adicionei -type f para que apenas arquivos regulares sejam considerados.

    
por 26.02.2018 / 17:30