Até onde sei, não há opção para informar find
para ler padrões de um arquivo. Uma solução fácil é salvar os padrões que desejo excluir em um arquivo e passar esse arquivo como entrada para um reverso grep
. Como exemplo, criei os seguintes arquivos e diretórios:
$ tree -a
.
├── a
├── .aa
├── .aa.bak
├── a.bck
├── b
├── .dir1
│ └── bb1.bak
├── dir2
│ └── bb2.bak
├── b.bak
├── c
├── c~
├── Documents
│ └── Documents.bak
├── exclude.txt
├── foo.backup
└── Music
└── Music.bak
Se eu entendi o exemplo que você postou corretamente, você deseja mover a.bck
, .aa.bak
, b.bak
, c~
, foo.backup
e dir2/bb2.bak
para a lixeira e deixar .aa.bak
, .dir1/bb1.bak
, Documents/Documents.bak
e Music/Music.bak
onde estão. Portanto, criei o arquivo exclude.txt
com o seguinte conteúdo (você pode adicionar quantos desejar):
$ cat exclude.txt
./.*/
./Music
./Documents
Eu uso ./.*/
porque entendi sua descoberta original como significando que você deseja mover arquivos de backup ocultos ( .foo
) que estão no diretório atual mas excluem todos os arquivos de backup que estão em diretórios ocultos ( .foo/bar
) . Portanto, agora posso executar o comando find
e usar grep
para excluir arquivos indesejados:
$ find . -type f | grep -vZf exclude.txt | xargs -0 --no-run-if-empty trash-put
Opções do Grep:
-v, --invert-match
Invert the sense of matching, to select non-matching
lines. (-v is specified by POSIX.)
-f FILE, --file=FILE
Obtain patterns from FILE, one per line. The empty
file contains zero patterns, and therefore matches
nothing. (-f is specified by POSIX.)
-Z, --null
Output a zero byte (the ASCII NUL character) instead of
the character that normally follows a file name. For
example, grep -lZ outputs a zero byte after each file
name instead of the usual newline. This option makes
the output unambiguous, even in the presence of file
names containing unusual characters like newlines.
This option can be used with commands like find
-print0, perl -0, sort -z, and xargs -0 to process
arbitrary file names, even those that contain newline
characters.