我想移动命令的输出:
ls -1 /${TMP_DIR}/*0000000221*.dbf | xargs | sed 's/ /,/g'
在它之后的命令的末尾,就像那样:
ls -1 /${TMP_DIR}/*0000000221*.dbf | xargs | sed 's/ /,/g' | impdp sim/sim files=$1
例如:
执行ls -1 /${TMP_DIR}/*0000000221*.dbf | xargs | sed 's/ /,/g'
会给我:
/tmp/a_0000000221.dbf,/tmp/a_00000002212.dbf,/tmp/b_0000000221.dbf
所以我希望最后的命令看起来像:
impdp sim/sim files=/tmp/a_0000000221.dbf,/tmp/a_00000002212.dbf,/tmp/b_0000000221.dbf
编辑:
对不起,我没有从头开始写这个 - 我在命令${TMP_DIR}
答案 0 :(得分:1)
你可能不需要那么多管道。您可以像这样使用它:
printf "impdp sim/sim files=" && printf "%s," /tmp/*0000000221*.dbf
impdp sim/sim files=/tmp/a_0000000221.dbf,/tmp/a_00000002212.dbf,/tmp/b_0000000221.dbf,
答案 1 :(得分:0)
ls
有点多余。
你可以把shell搞得那些,然后用printf把它们放到一行。
要使用','而不是'\ n'分隔这些项目,您可以使用paste
最后,将所有内容放在$()中将在子shell中执行, 并在当前shell中输出命令的结果。
impdp sim/sim files=$(printf '%s\n' /${TMP_DIR}/*0000000221*.dbf | paste -d, -s)
答案 2 :(得分:0)
您可以使用globbing,一个数组和IFS
来构造参数字符串:
$ ls -1
1.txt
2.txt
3.txt
$ echo impdp sim/sim files="$(a=(*.txt);IFS=',';echo "${a[*]}")"
impdp sim/sim files=1.txt,2.txt,3.txt
显然,这会破坏带有空格或换行符的文件名。
要运行,只需删除echo
。
答案 3 :(得分:0)
您可以尝试其他命令顺序:
impdp sim/sim files=$(ls -1 /tmp/*0000000221*.dbf | xargs | sed 's/ /,/g')
答案 4 :(得分:0)
(包括我的所有解决方案都假定您的文件名不包含空格)
sed有点矫枉过正,你可以使用tr并避免使用xargs:
impdp sim/sim files=$(ls /tmp/*0000000221*.dbf | tr "\n" ",")