如何在find-command上转义-exec?

Chr*_*ris 0 linux bash shell

我的硬盘上有重复文件列表.我很难检查列表中是否有文件.Grepping

grep $1 $2 > /dev/null || echo $1
Run Code Online (Sandbox Code Playgroud)

作品.但我不能让它在find命令的-exec-Part中工作.

find 250G_EXT4/ -type f -exec grep "{}" duplicates_sorted.txt \> /dev/null \|\| echo {} \;
Run Code Online (Sandbox Code Playgroud)

消息是

grep: >: Datei oder Verzeichnis nicht gefunden (File or directory not found)
grep: ||: Datei oder Verzeichnis nicht gefunden ...
grep: echo: Datei oder Verzeichnis nicht gefunden ...
Run Code Online (Sandbox Code Playgroud)

有没有人知道逃脱序列是正确的?或许是一个不同的想法?

tri*_*eee 5

为什么不简单

find | grep -vFf duplicates_sorted.txt -
Run Code Online (Sandbox Code Playgroud)

这也应该快得多.

(该-F标志指定文字匹配,即没有正则表达式匹配.否则a.c将匹配abc等)

find -exec只需一个命令; 单个命令可以是一个传递给它的任意复杂脚本的shell:

find -exec sh -c 'grep -q "$1" file || echo "$1"' dummy {} \;
Run Code Online (Sandbox Code Playgroud)

我们sh -c使用第一个参数作为$0传递虚拟占位符值.