首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用以下方法输出到变量或文件(使用-exec和shred查找)

使用以下方法输出到变量或文件(使用-exec和shred查找)
EN

Unix & Linux用户
提问于 2022-01-24 21:02:54
回答 1查看 309关注 0票数 3

我有一个find命令,我执行它分解,它工作很好;但是,我需要捕获它的输出,并传递给一个变量或文件。我尝试过多次迭代下面的命令,但似乎无法让它工作。我也尝试过循环。它将始终显示到我的终端,因为它通过分解的进程,但从来没有写到一个文件或变量。我更喜欢变量,但在这一点上,我将取任何变量。请参阅我的例子如下:

Original查找命令:

代码语言:javascript
复制
find /burncd/working -type f -exec shred -v -n7 -z --remove {} \; 

Latest尝试在一个命令下传递给一个文件(来自StackExchange):

代码语言:javascript
复制
find /burncd/working/* -type f -exec bash -c 'shred -v -n7 -z --remove "$1" /tmp/find.out' $0 {} \;

我很感激你能提供的任何帮助。

EN

回答 1

Unix & Linux用户

发布于 2022-01-24 21:30:46

shred似乎将进度状态输出到stderr,而不是stdout,因此您需要使用2>2>>来重定向输出。

像这样的东西会重定向find和shred的stderr:

代码语言:javascript
复制
find . -type f -exec shred -n1 -v {} + 2> /tmp/shred.out

这只会重定向shred的stderr:

代码语言:javascript
复制
> ../shred.out
find . -type f -exec sh -c 'shred -n1 -v "$@" 2>> /tmp/shred.out' find-sh {} + 

(查找开始的shell获取find-sh,文件名作为参数,find-sh转到$0,文件名转到$1$2.,所有这些"$@"都扩展为不同的单词。传递到$0的字符串可以是任意的,但它有助于在某种程度上描述性,因为它可能用于错误消息。)

此外,您还可以这样做,以获得find的输出,并将其分解到文件和终端:

代码语言:javascript
复制
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的输出通过tee。尽管findshred的背对背输出可能会被错误的顺序混合在一起。)

票数 4
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/687773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档