我有两个目录是'dir1'和'dir2',我想输出两个目录的所有内容。所以,我使用bash命令'xargs'只用一个命令行。命令是“echo'1 2'| xargs -d''-I @ -t sh -c'cat dir @ / *'”,但结果很奇怪。
[u@10 /data1/walter]$ echo '1 2' | xargs -d ' ' -I @ -t sh -c 'cat dir@/*'
sh -c cat dir1/* <<<< This output is normal
1 <<<< This is all content in dir1
sh -c cat dir2
/* <<<< these two lines are odd, it looks like xargs insert a '\n' between 'dir2' and '/*'
cat: dir2: Is a directory <<<< as a result, 'cat' can't receive argument 'dir2'
sh: line 1: /bin: is a directory <<<< and command line '/*' is error
答案 0 :(得分:3)
echo
会自动在其输出中附加换行符,因此xargs
会获得两个值来替换@
:1
和2\n
。立即修复是使用
echo -n '1 2' | xargs ...
或(更便携)
printf '1 2' | xargs ...
然而,正如其他人所指出的那样,使用xargs
可能比它需要的更复杂。
答案 1 :(得分:1)
答案 2 :(得分:0)
您只需指定两个目录:
ls dir1 dir2
或者
find dir1 dir2
如果你想要一个更复杂的解决方案(即在多个目录中查找)