我有一个包含多对文件的目录。每个非文本文件都有一个文本描述伙伴。例如一个目录可以是这样的:
a.jpg
a.jpg.text
b.ogv
b.ogv.text
cd ef.JpG
cd ef.JpG.text
我想确认没有松散的文本文件(已删除内容的描述文件)。所以我试图执行以下操作:
find . -name '*.text' -exec if [ ! -f `basename -s .text {}` ]; then echo {}; fi \;
但是,现在我收到一个错误:
bash: syntax error near unexpected token `then'
您只是不能以您希望的方式在命令操作
if
内部使用。这是因为以下原因:-exec
find
-exec
动作需要一个命令。这是来自man find
(在我终端的第 697 行的某处):if
不是您认为的命令,而是shell 关键字。查看type if
命令的输出。现在,要完成你想要的,你真的不需要使用
if
inside of-exec
. 只需在 中进行测试-exec
,然后使用-print
(man find
有关更多信息,请参阅):另一种方法是使用 bash 脚本,如下所示:
在我的案例中,哪里
cat ~/bin/my_if
给出了以下输出:最后,我认为所有使用 bash 的正常人都会使用:
if
这是在exec
子句中使用 an 的非优化方式:这里有一些更好的东西,它不会为每个文件启动一个 shell: