我用这种方式为/var/www/html
中的所有文件制作指纹。
find /var/www/html -type f |xargs md5sum | tee /opt/figerprint.db.ori
它运行良好。
现在,我想将所有stdout of tee命令重定向到/dev/null。
find /var/www/html -type f |xargs md5sum | tee /opt/figerprint.db.ori 1>/dev/null
md5sum: /var/www/html/news/uploads/Red: No such file or directory
md5sum: Hat: No such file or directory
md5sum: Enterprise: No such file or directory
md5sum: Linux: No such file or directory
md5sum: 6.txt: No such file or directory
我发现没有一个文件名无法正确解析。
ls /var/www/html/news/uploads/Red*
/var/www/html/news/uploads/Red Hat Enterprise Linux 6.txt
如何修复我的命令以正确地将stdout重定向到/dev/null?
您的stdout重定向工作正常,与您收到的错误消息无关(这是标准错误,而不是标准输出。如果您想丢弃stderr,那就是2>/dev/null
(。
错误的原因是您正在将未引用的文件名传递给md5sum
。GNUfind
的一个常见解决方法是使用零字节终止符而不是换行符:
find /var/www/html -type f -print0 |
xargs -0 md5sum |
tee /opt/figerprint.db.ori >/dev/null
当然,如果放弃标准输出,就不需要tee
。
find /var/www/html -type f -print0 |
xargs -0 md5sum >/opt/figerprint.db.ori
一个常见的添加是xargs -r
,用于在find
找不到任何文件时阻止md5sum
运行。
错误消息表明您可能没有GNUfind
。另一种实现相同目的的方法是
find /var/www/html -type f -exec md5sum {} + >/opt/figerprint.db.ori
如果你的find
真的很古老,不支持-exec ... +
,你需要切换到
find /var/www/html -type f -exec md5sum {} ; >/opt/figerprint.db.ori
然而这将是相当低效的,因为它为每个找到的文件创建一个进程。
试着这样做:
find /var/www/html -type f | xargs -i md5sum | tee /opt/figerprint.db.ori 1>/dev/null
来自xargs
的手册:
-I替换str
将初始参数中出现的Replace str替换为从标准输入中读取的名称。此外,未加引号的空格不会终止输入项;相反,分隔符是换行符。隐含-x和-L1.
为什么find /var/www/html -type f |xargs md5sum | tee /opt/figerprint.db.ori
不能显示错误信息?
find /var/www/html -type f |xargs md5sum
md5sum: /var/www/html/news/uploads/Red: No such file or directory
md5sum: Hat: No such file or directory
md5sum: Enterprise: No such file or directory
md5sum: Linux: No such file or directory
md5sum: 6.txt: No such file or directory
tee
将在屏幕上同时显示stdout和stderr,但默认情况下只写入stdout信息。
find /var/www/html -type f |xargs md5sum | tee /opt/figerprint.db.ori
我在屏幕上查看上述命令的输出,
md5sum: /var/www/html/news/uploads/Red: No such file or directory
md5sum: Hat: No such file or directory
md5sum: Enterprise: No such file or directory
md5sum: Linux: No such file or directory
md5sum: 6.txt: No such file or directory
上面的行(称之为相关错误信息(被许多其他行(如(包围
b61b25303be0f573a6b9446d5cbe3a5b /var/www/html/index.php
默认情况下,相关的错误信息不能写入文件(tee的字符(。
find /var/www/html -type f |xargs md5sum | tee /opt/figerprint.db.ori
永远不会正常工作。