2009-11-06 197 views
66

我知道**/*.ext擴展到與*.ext相匹配的所有子目錄中的所有文件,但是在當前目錄中同樣包含了所有這些文件的擴展?遞歸地擴展到當前目錄中的所有文件?

+2

發現怎麼樣? – Aif 2009-11-06 22:09:56

+4

我的bash不處理'**/*。ext'。你確定它適合你嗎? – tangens 2009-11-06 22:14:26

+0

@tangens你必須按照Dennis的回答啓用'globstar'選項。 – kenorb 2015-04-19 14:44:01

回答

82

這將在擊4工作:

ls -l {,**/}*.ext 

爲了使雙星號水珠工作,globstar選項需要設置(默認值:開啓):

shopt -s globstar 

man bash

 
    globstar 
        If set, the pattern ** used in a filename expansion con‐ 
        text will match a files and zero or more directories and 
        subdirectories. If the pattern is followed by a /, only 
        directories and subdirectories match. 
+4

我測試了Ubuntu和Cygwin,而'globstar'默認'關' – 2013-07-01 08:17:12

+11

最好的答案!但是我認爲'**/*。ext'應該夠用了。另外,除非使用'shopt -s dotglob',否則不會有隱藏的文件。 – 2013-07-01 20:49:04

+0

我的Centos 6 Bash 4.1.2也默認關閉globstar選項。 – toxalot 2014-03-10 09:29:41

3
$ find . -type f 

這將列出當前目錄中的所有文件。然後,您可以用做輸出其他一些命令-exec

$find . -type f -exec grep "foo" {} \; 

這將用grep從查找字符串「foo」的每個文件。

10

這將打印當前目錄及其以'.ext'結尾的子目錄中的所有文件。

find . -name '*.ext' -print 
4

您可以使用:**/*.*以遞歸方式包含所有文件(由shopt -s globstar啓用)。

請在下面找到其他變化的測試以及它們的行爲。


與3472個文件樣本VLC資源庫文件夾測試文件夾:

(3472文件總數算作每個:find . -type f | wc -l

  • ls -1 **/*.* - 收益3338
  • ls -1 {,**/}*.* - 退貨3341(由提議)
  • ls -1 {,**/}* - 返回8265
  • ls -1 **/* - 回報7817,除了隱藏文件(如提出Dennis
  • ls -1 **/{.[^.],}* - 收益7869(提議Dennis
  • ls -1 {,**/}.?* - 返回15855
  • ls -1 {,**/}.* - 返回20321

所以我認爲最接近的方法列出所有文件的遞歸伊利是第一個例子(**/*.*),按照gniourf-gniourf comment(假設文件有適當的擴展,或使用特定的一個),作爲第二個實施例給出了象下面幾個重複:

$ diff -u <(ls -1 {,**/}*.*) <(ls -1 **/*.*) 
--- /dev/fd/63 2015-04-19 15:25:07.000000000 +0100 
+++ /dev/fd/62 2015-04-19 15:25:07.000000000 +0100 
@@ -1,6 +1,4 @@ 
COPYING.LIB 
-COPYING.LIB 
-Makefile.am 
Makefile.am 
@@ -45,7 +43,6 @@ 
compat/tdestroy.c 
compat/vasprintf.c 
configure.ac 
-configure.ac 

並且另一個產生甚至進一步重複。


要包括隱藏文件,使用方法:shopt -s dotglob(由shopt -u dotglob禁用)。不建議這樣做,因爲它可能會影響命令,如mvrm,並且您可以意外刪除錯誤的文件。

+0

在啓用globstar的Mac終端和bash上,我找到了上述解決方案('''**/*。*''')提供信息並且效果最佳。接受的答案導致頂部目錄中的項目重複。我的工作模式是:'''「$ {path}」**/*。*''' – mummybot 2017-01-16 10:16:48

相關問題