使用输出到变量或文件(使用 -exec 和 shred 查找)

使用输出到变量或文件(使用 -exec 和 shred 查找)

我有一个 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 {} +应该只将shredthrough的输出放入。尽管如果这样做,则和tee的背对背输出可能会以错误的顺序混合。)findshred

相关内容