2014-09-02 91 views
0

我有兩個目錄'dir1'和'dir2',我想輸出這兩個目錄的所有內容。所以,我使用bash命令'xargs'僅通過一個命令行來創建它。命令是「echo'1 2'| xargs -d''-I @ -t sh -c'cat dir @/*'」,但結果很奇怪。關於xargs和通配符的技巧

[[email protected] /data1/walter]$ echo '1 2' | xargs -d ' ' -I @ -t sh -c 'cat [email protected]/*' 
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

嘗試使用find dir *。你可以訪問find的man頁面來控制/格式化你想要的輸出方式。 – Pratham 2014-09-02 12:48:57

回答

3

echo自動附加一個新行至其輸出,因此xargs越來越兩個值來替代@12\n。一個直接的解決方法是使用

echo -n '1 2' | xargs ... 

禁用換行或(更便攜)

printf '1 2' | xargs ... 

然而,正如其他人所指出的那樣,使用xargs這可能是更復雜得多,它需要的。

0

也許我錯過了你的問題的東西,但你可以簡單地通過這兩個目錄來ls

ls dir{1,2}/* 
0

你可以簡單地指定:

ls dir1/* dir2/* 

這可以使用brace expansion簡化兩個目錄:

ls dir1 dir2 

或許

find dir1 dir2 
如果你想要一個更復雜的解決方案

(即在多個目錄中找到)