Ric*_*chR 2 bash shell find quoting
我把下面的内容拼凑在一起,似乎有效,可能的例外是"!-empty".我正在学习的一件事(就像我去的那样)是因为某些东西起作用,并不意味着它是正确的或正确形成的...我的问题是你如何确定需要括号的内容和查找中的内容命令?
在OS X中, - 并且"由两个表达式的并置暗示它不必指定"
我的目标是找到:找到超过5分钟但不是空的目录,而不是.dot(隐藏-ie"."和"..")
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
Run Code Online (Sandbox Code Playgroud)
我可以这样做:
find . -type d -mmin +5 \! -empty \! -iname ".*"
Run Code Online (Sandbox Code Playgroud)
?或者由于某种原因这是不正确的?
Rei*_*ase 11
find 按优先顺序列出以下运算符(最高 - >最低)
()!|-not-a|-and -o|-or,(GNU只)注意:全部tests并且actions具有-a相互隐含的链接
因此,如果您不使用任何运算符,则不必担心优先级.如果你只是not在你的情况下使用like,你也不必担心优先级,因为由于优先级高于隐含优先级,因此! 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
Run Code Online (Sandbox Code Playgroud)
以上被视为 find -mindepth 1 (-type f AND -name 'a') OR (-name 'b')
> find -mindepth 1 -type f \( -name 'a' -or -name 'b' \)
./a
Run Code Online (Sandbox Code Playgroud)
以上被视为 find -mindepth 1 (-type f) AND ( -name 'a' OR -name 'b')
注意:选项(即-mindepth,-noleaf等等)始终为true
结论
以下两种用法find完全相同
find . -type d -mmin +5 \! -empty \( ! -iname ".*" \) | wc -lfind . -type d -mmin +5 \! -empty \! -iname ".*" | wc -l 两者都被视为
find . (-type d) AND (-mmin +5) AND (! -empty) AND (! -iname ".*") | wc -l