我有一个 find 命令,我执行它来粉碎它,它效果很好;但是,我需要捕获其输出并传递给变量或文件。我已经尝试了以下命令的多次迭代,但似乎无法让它工作。我也尝试过for循环。当它经历粉碎过程时,它总是会显示在我的终端上,但永远不会写入文件或变量。我更喜欢一个变量,但此时会采取任何措施。请看我下面的例子:
原始查找命令:
find /burncd/working -type f -exec shred -v -n7 -z --remove {} \;
最新尝试传递到文件的命令(来自 StackExchange):
find /burncd/working/* -type f -exec bash -c 'shred -v -n7 -z --remove "$1" /tmp/find.out' $0 {} \;
如果您能提供任何帮助,我将不胜感激。
答案1
shred
似乎将进度状态输出到 stderr 而不是 stdout,因此您需要使用2>
或2>>
来重定向该输出。
像这样的东西会重定向 find 和 shred 的 stderr:
find . -type f -exec shred -n1 -v {} + 2> /tmp/shred.out
这只会重定向以下的 stderr shred
:
> ../shred.out
find . -type f -exec sh -c 'shred -n1 -v "$@" 2>> /tmp/shred.out' find-sh {} +
( find 启动的 shell 获取find-sh
文件名作为参数,find-sh
转到$0
,文件名到$1
, $2
...,所有这些"$@"
都扩展为不同的单词。转到的字符串$0
可以是任意的,但它有助于具有一定的描述性,因为它可以在错误消息中使用。)
您也可以执行类似的操作,将 find 和 shred 的输出同时发送到文件和终端:
find . -type f -exec shred -n1 -v {} + 2>&1 | tee /tmp/shred.out
(类似地,find .. -exec sh -c 'shred ... 2>&1 | tee /tmp/shred.out' find-sh {} +
应该只将shred
through的输出放入。尽管如果这样做,则和tee
的背对背输出可能会以错误的顺序混合。)find
shred