通过管道传输到另一个命令时命令的输出

通过管道传输到另一个命令时命令的输出

我正在运行一个命令,该命令对某些文件进行快速校验和,如下所示

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。然后你不想担心文件名中的疯狂字符(空格,换行符,等等),所以我们使用-print0for find 和-0for 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

当我这样做时,我开始看到一些很棒的文字从屏幕上滚下来:)

相关内容