Bash 关于xargs和通配符的技巧

Bash 关于xargs和通配符的技巧,bash,xargs,Bash,Xargs,我有两个目录,分别是'dir1'和'dir2',我想输出这两个目录的所有内容。因此,我使用bash命令“xargs”仅通过一个命令行实现。命令是“echo'12'| 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

我有两个目录,分别是'dir1'和'dir2',我想输出这两个目录的所有内容。因此,我使用bash命令“xargs”仅通过一个命令行实现。命令是“echo'12'| 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
[u@10/data1/walter]$echo'12'| xargs-d'-I@-t sh-c'cat dir@/*'

sh-c cat dir1/*也许我遗漏了您问题中的某些内容,但您只需将这两个目录传递到
ls

ls dir1/* dir2/*
这可以通过以下方式简化:


也许我在你的问题中遗漏了什么,但你可以将两个目录都传递到
ls

ls dir1/* dir2/*
这可以通过以下方式简化:


您只需指定两个目录:

ls dir1 dir2
或许

find dir1 dir2

如果需要更复杂的解决方案(即跨多个目录查找)

只需指定两个目录即可:

ls dir1 dir2
或许

find dir1 dir2

如果您想要更复杂的解决方案(即跨多个目录查找)

echo
会自动在其输出中添加一个换行符,因此
xargs
将获得两个值来替换
@
1
2\n
。一个直接的修复方法是使用禁用换行符

echo -n '1 2' | xargs ...
或者(更便于携带)


然而,正如其他人所指出的,使用
xargs
来实现这一点可能比它需要的更复杂。

echo
自动在其输出中添加一个换行符,因此
xargs
得到两个值来代替
@
1
2\n
。一个直接的修复方法是使用禁用换行符

echo -n '1 2' | xargs ...
或者(更便于携带)


但是,正如其他人所指出的,使用
xargs
进行此操作可能比需要的更复杂。

尝试使用find dir*。您可以访问find的手册页,以您想要的方式控制/格式化输出。尝试使用find dir*。您可以访问find的手册页,以您想要的方式控制/格式化输出。