我正在运行一个命令,该命令对某些文件进行快速校验和,如下所示
find / -type f -ctime +30 -mtime +30 -atime +30 -exec md5sum {} \; | xargs -P 4
我正在尝试并行运行它
xargs -P 4
现在,当我单独运行 find 命令时,我会看到对每个文件进行校验和时的输出。但是当我通过管道将其传输到 xargs 时,我不再看到 find 命令的输出。
当 find 通过管道传输到另一个命令时,有没有办法可以看到 find 的输出?
答案1
你要这个:
find / -type f -ctime +30 -mtime +30 -atime +30 -print0 | xargs -0 -P 4 md5sum
您希望将文件列表输入到 md5sum 命令中。这是用 完成的find / | xargs md5sum
。然后你不想担心文件名中的疯狂字符(空格,换行符,等等),所以我们使用-print0
for find 和-0
for xargs。
答案2
我接受了你的命令
$ find / -type f -ctime +30 -mtime +30 -atime +30 -exec md5sum {} \; | xargs -P 4
并认为我们想要重定向,同时仍然回显到标准输出。我们可以做到这一点的一种方法是使用 T 恤
$ man tee | head
NAME
tee - read from standard input and write to standard output and files
因此,tee 肯定会写入标准输出(这是我们继续链所需的),并且还会写入我们选择的文件。伟大的!但什么文件?
感谢这个答案的想法https://stackoverflow.com/a/9405342, 我们可以用
/dev/tty
对于我们的重定向,它将打印到我们的控制台!
因此,对于完整的命令:
$ find / -type f -ctime +30 -mtime +30 -atime +30 -exec md5sum {} \; | tee /dev/tty | xargs -P 4
当我这样做时,我开始看到一些很棒的文字从屏幕上滚下来:)