我知道**/*.ext
擴展到與*.ext
相匹配的所有子目錄中的所有文件,但是在當前目錄中同樣包含了所有這些文件的擴展?遞歸地擴展到當前目錄中的所有文件?
回答
這將在擊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.
我測試了Ubuntu和Cygwin,而'globstar'默認'關' – 2013-07-01 08:17:12
最好的答案!但是我認爲'**/*。ext'應該夠用了。另外,除非使用'shopt -s dotglob',否則不會有隱藏的文件。 – 2013-07-01 20:49:04
我的Centos 6 Bash 4.1.2也默認關閉globstar選項。 – toxalot 2014-03-10 09:29:41
$ find . -type f
這將列出當前目錄中的所有文件。然後,您可以用做輸出其他一些命令-exec
$find . -type f -exec grep "foo" {} \;
這將用grep從查找字符串「foo」的每個文件。
這將打印當前目錄及其以'.ext'結尾的子目錄中的所有文件。
find . -name '*.ext' -print
您可以使用:**/*.*
以遞歸方式包含所有文件(由shopt -s globstar
啓用)。
請在下面找到其他變化的測試以及它們的行爲。
與3472個文件樣本VLC資源庫文件夾測試文件夾:
(3472文件總數算作每個:find . -type f | wc -l
)
ls -1 **/*.*
- 收益3338ls -1 {,**/}*.*
- 退貨3341(由提議)ls -1 {,**/}*
- 返回8265ls -1 **/*
- 回報7817,除了隱藏文件(如提出Dennis)ls -1 **/{.[^.],}*
- 收益7869(提議Dennis)ls -1 {,**/}.?*
- 返回15855ls -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
禁用)。不建議這樣做,因爲它可能會影響命令,如mv
或rm
,並且您可以意外刪除錯誤的文件。
在啓用globstar的Mac終端和bash上,我找到了上述解決方案('''**/*。*''')提供信息並且效果最佳。接受的答案導致頂部目錄中的項目重複。我的工作模式是:'''「$ {path}」**/*。*''' – mummybot 2017-01-16 10:16:48
- 1. 如何從目錄中遞歸地查找所有文件擴展名?
- 2. 遞歸添加文件擴展名到所有文件
- 3. 遞歸地scp除當前目錄外
- 4. 遞歸地搜索文件,而不是當前目錄
- 5. CMake遞歸地將目錄的所有子目錄內的所有源文件添加到可執行文件?
- 6. 遞歸文件擴展
- 7. 更改目錄中所有文件的文件擴展名OSX
- 8. 遞歸地確定文件夾中所有擴展名的COUNT和SUM
- 9. 遞歸地比較目錄,忽略所有二進制文件:
- 10. 遞歸地顯示具有特定擴展名的所有文件
- 11. 在目錄中遞歸搜索具有特定擴展名的文件
- 12. 獲取當前目錄中的所有文件和目錄python
- 13. 遞歸查找目錄中的所有文本文件
- 14. windows c代碼遞歸地列出文件名在一個具有所需擴展名的目錄內
- 15. 遞歸地查找具有特定擴展名的文件
- 16. 保持目錄和所有子目錄遞歸除了文件
- 17. C++ - 加載所有文件名+計算當前目錄中文件的數量+篩選文件擴展名
- 18. Windows 7文件權限 - 強制目錄權限遞歸到所有當前和將來的文件
- 19. 使用glob.glob遞歸搜索當前目錄下的* .txt文件
- 20. 列出除擴展名外的目錄中的所有文件
- 21. CoffeeScript - 編譯當前目錄和所有子目錄中的所有.coffee文件
- 22. Makefile編譯當前目錄和所有子目錄中的所有.cpp文件
- 23. 列出文件遞歸地目錄名
- 24. 獲取目錄中所有文件的列表(遞歸)
- 25. 使用遞歸獲取某個目錄中的所有文件
- 26. 獲取所有目錄中的文件遞歸提交
- 27. 使用nio.file.DirectoryStream遞歸列出目錄中的所有文件;
- 28. 遞歸讀取目錄中的所有文件 - FileSystem API
- 29. 遞歸地將文件包含到所有php文件中
- 30. gitignore目錄中所有擴展名的文件
發現怎麼樣? – Aif 2009-11-06 22:09:56
我的bash不處理'**/*。ext'。你確定它適合你嗎? – tangens 2009-11-06 22:14:26
@tangens你必須按照Dennis的回答啓用'globstar'選項。 – kenorb 2015-04-19 14:44:01