Tente isso:
$ find . \( -name "*.avi" -o -name "*.mkv" \) -exec basename {} \; > ~/Bash/test/rm/films.txt
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
Existem dois erros no seu comando.
\{}
deve ser {}
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.
Tags command-line find linux