我有一个find命令,我执行它分解,它工作很好;但是,我需要捕获它的输出,并传递给一个变量或文件。我尝试过多次迭代下面的命令,但似乎无法让它工作。我也尝试过循环。它将始终显示到我的终端,因为它通过分解的进程,但从来没有写到一个文件或变量。我更喜欢变量,但在这一点上,我将取任何变量。请参阅我的例子如下:
Original查找命令:
find /burncd/working -type f -exec shred -v -n7 -z --remove {} \; Latest尝试在一个命令下传递给一个文件(来自StackExchange):
find /burncd/working/* -type f -exec bash -c 'shred -v -n7 -z --remove "$1" /tmp/find.out' $0 {} \;我很感激你能提供的任何帮助。
发布于 2022-01-24 21:30:46
shred似乎将进度状态输出到stderr,而不是stdout,因此您需要使用2>或2>>来重定向输出。
像这样的东西会重定向find和shred的stderr:
find . -type f -exec shred -n1 -v {} + 2> /tmp/shred.out这只会重定向shred的stderr:
> ../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的输出,并将其分解到文件和终端:
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。尽管find和shred的背对背输出可能会被错误的顺序混合在一起。)
https://unix.stackexchange.com/questions/687773
复制相似问题