我已经拼凑了下面的内容,它似乎可以工作,但“!-空”可能是个例外。我正在学习的一件事(随着我的学习)是,仅仅因为某些东西有效,并不意味着它是正确的或正确形成的......我的问题是如何确定查找中哪些需要括号,哪些不需要命令?
在 OS X 中,-and 是“由两个表达式并置暗示的,无需指定”
我的目标是找到:
查找超过 5 分钟、非空且不是 .dot 的目录(隐藏 - 即“.”和“..”)
count="$( find . -type d -mmin +5 \! -empty \( ! -iname ".*" \) | wc -l )"
echo $count
if [ "$count" -gt 0 ] ; then
echo $(date +"%r") "$cust_name loc 9: "${count}" directories exist to process, moving them" >> $logFILE
find . -type d -mmin +5 \! -empty \( ! -iname ".*" \) | xargs -I % mv % ../02_processing/
cd $processingPATH
# append the time and the directories to be processed in files_sent.txt
date +"---- %a-%b-%d %H:%M ----" >> $filesSENTlog
ls >> $filesSENTlog
find . -type f -print0 | xargs -0 /usr/local/dcm4che-2.0.28/bin/dcmsnd $aet@$peer:$port
echo $(date +"%r") "$cust_name loc 10: Processing ${count} items..." >> $logFILE
# clean up processed studies > from processing to processed
echo $(date +"%r") "$cust_name loc 11: Moving ${count} items to 03_processed" >> $logFILE
mv * $processedPATH
else
echo $(date +"%r") "$cust_name loc 12: there are no directories to process" >> $logFILE
fi
我可以这样做吗:
find . -type d -mmin +5 \! -empty \! -iname ".*"
?或者由于某种原因这不正确?
find
具有以下按优先级顺序列出的运算符(最高 -> 最低)
()
!|-not
-
-a|-and
-o|-or
-
,
(GNU
only)
注:全部tests
and actions
有隐含的-a
相互联系
因此,如果您不使用任何运算符,则不必担心优先级。如果你只是使用not
就像你的情况一样,你也不必担心优先级,因为! exp exp2
将被视为(! exp) AND (exp2)
正如预期的那样,由于!
具有比隐含的优先级更高的优先级and
.
优先级很重要的示例
> mkdir empty && cd empty && touch a && mkdir b
> find -mindepth 1 -type f -name 'a' -or -name 'b'
./a
./b
以上被视为find -mindepth 1 (-type f AND -name 'a') OR (-name 'b')
> find -mindepth 1 -type f \( -name 'a' -or -name 'b' \)
./a
以上被视为find -mindepth 1 (-type f) AND ( -name 'a' OR -name 'b')
注意:选项(即 -mindepth、-noleaf 等)始终为 true
结论
下面两个用途find
完全一样
find . -type d -mmin +5 \! -empty \( ! -iname ".*" \) | wc -l
-
find . -type d -mmin +5 \! -empty \! -iname ".*" | wc -l
两者都被视为
find . (-type d) AND (-mmin +5) AND (! -empty) AND (! -iname ".*") | wc -l
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)