Shell-Script

管道傳輸到另一個命令時的命令輸出

  • May 1, 2014

我正在執行一個命令,它對某些文件進行快速校驗和,如下所示

find / -type f -ctime +30 -mtime +30 -atime +30 -exec md5sum {} \; | xargs -P 4

我正在嘗試並行執行它

xargs -P 4

現在,當我單獨執行 find 命令時,我會看到輸出,因為每個文件都在進行校驗和。但是當我將它通過管道傳輸到 xargs 時,我不再看到 find 命令的輸出。

當通過管道傳輸到另一個命令時,有沒有辦法可以看到 find 的輸出?

你要這個:

find / -type f -ctime +30 -mtime +30 -atime +30 -print0 | xargs -0 -P 4 md5sum

您希望將文件列表輸入到 md5sum 命令中。這是用find / | xargs md5sum. 然後你不想擔心文件名中的瘋狂字元(空格、換行符等),所以我們使用-print0find 和-0xargs。

我接受了你的命令,

$ find / -type f -ctime +30 -mtime +30 -atime +30 -exec md5sum {} \; | xargs -P 4

並認為我們想要重定向,同時仍然回顯到標準輸出。我們可以做到這一點的一種方法是使用 tee

$ 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

當我這樣做時,我開始看到一些很棒的文字從螢幕上滾下來:)

引用自:https://unix.stackexchange.com/questions/127358