Bash 关于xargs和通配符的技巧
我有两个目录,分别是'dir1'和'dir2',我想输出这两个目录的所有内容。因此,我使用bash命令“xargs”仅通过一个命令行实现。命令是“echo'12'| xargs-d'-I@-t sh-c'cat dir@/*”,但结果是奇数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
[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的手册页,以您想要的方式控制/格式化输出。