如果我没有遗漏那些显而易见的东西,那么OSX版本的bash与Linux不同,因为我认为this question将提供我需要知道的所有内容。它没有。
我正在尝试使用 find
来查找所有不以“。”开头的目录。 (Mac OS X使用.-前缀作为隐藏文件夹,例如/volumes/OD/.Trashes)。我想将所有非隐藏目录通过管道传输到rysnc,以定期镜像两个本地目录。
我测试过以确保我在这里使用此代码正确使用:
find /volumes/OD -type d -iname ".*"
找到目录:
/volumes/OD/.Trashes
/volumes/OD/.Spotlight-V100
/volumes/OD/.fseventsd
到目前为止一切顺利。但是当我尝试否定我刚刚测试的条件时,我收到一个错误:
find /volumes/OD -type d -iname ! ".*"
产生此错误:
find: .*: unknown primary or operator
我试过逃避“。”用“\”,但我只得到相同的错误信息。我已经尝试删除括号,但我得到相同的错误消息。我在这里错过了什么?我应该使用iname
以外的其他运算符吗?
答案 0 :(得分:5)
!
必须在条件之前:
find /volumes/OD -type d '!' -iname '.*'
也就是说,您不需要将文件列表从find
传输到rsync
;我确信后者提供了一种排除点文件夹的方法。也许
rsync --exclude='.*' ...
答案 1 :(得分:1)
原因:
!
是以下职位的前缀:
!23
!routENTER
你应该这样做:
find /volumes/OD -type d \! -iname '.*'
答案 2 :(得分:1)
ruakh得到了正确的答案,但这是另一种搜索方式:
find /volumes/OD -type d -not -iname ".*"