当我运行以下命令时,它给了我一个错误:
$ rm -f `find /home/domain/imap/domain.com/*/Maildir -mtime +190 | grep -E '/cur/|/new/'`
-bash: /bin/rm: Argument list too long
Run Code Online (Sandbox Code Playgroud)
我怎样才能在没有错误的情况下运行它?(或者我怎样才能把它放进去.sh
?)
好吧,我很想做这样的事情,使整个操作成为一个命令。
find /home/domain/imap/domain.com/ -mtime +190 \
\( -ipath '*/Maildir/new/*' -o -ipath '*/Maildir/cur/*' \) \
-delete
Run Code Online (Sandbox Code Playgroud)
最简单的方法:创建一个循环,通过管道获取结果
find [expression] | while read; do [do something with $REPLY, for example] echo "$REPLY"; done
Run Code Online (Sandbox Code Playgroud)
或临时文件:
FILE="OUT_`date`"
find [expression] > $FILE
while read; do
[do something with $REPLY, for example] echo "$REPLY"
done < $FILE
Run Code Online (Sandbox Code Playgroud)
请注意,如果您执行“rm”,则参数可能看起来像选项。考虑一个恰好名为“-rf”的文件。因此,如果删除不是从当前目录开始,建议写入rm -- "$FILE"
or rm "./$FILE"
(或两者) or else 。rm "$PATH/$FILE"
而单线find
则不存在这个问题。为了避免rm
带有选项的命令可能出现别名,请显式调用/bin/rm
.