因此,我試圖對大量文件執行批處理,但我希望批處理先從最小的文件開始。我需要做的是按升序獲取所有文件名,按文件大小排序。我見過一些例子,但一個問題是一些文件名包含空格,連字符,下劃線和其他特殊字符,所以我找不到任何適合我的東西。在BASH中按文件大小順序列出文件名
回答
ls -rS
會做的伎倆。該名男子頁詳細解釋:http://man7.org/linux/man-pages/man1/ls.1.html
find . -type f -print0 | xargs -0 wc -c | sort -n
上面的例子列出了大小的升序當前目錄下的文件。 find命令的參數-print0
指示它使用null '\0'
字符而不是空格作爲搜索結果之間的分隔符。在管道的另一端,-0
參數準備xargs
命令來做同樣的事情。這將處理文件名中的空白字符作爲普通字符。
'發現。 -type f -exec wc -c {} + | sort -n'是一個更符合POSIX標準的更高效的替代方案('-print0'不是)。但是,問題在於'wc'具有多於1個文件名參數,以'
如果:
- 你不擔心與嵌入式換行符文件名和
- 你並不需要實際的文件大小,只是底層文件大小排序的文件名,
然後K. Matthews' answer應該爲你工作。
否則,假設你有GNU公用事業:
find . -mindepth 1 -maxdepth 1 -type f -printf '%s\t%f\0' |
sort -zn -k1,1 |
while read -r -d '' size name; do echo "[$size] [$name]"; done
-mindepth 1 -maxdepth 1
限制匹配直接位於.
文件,類似於ls
(雖然隱藏文件總是包括在內)。忽略整個子樹中的處理文件。
的while
循環示出了進一步處理由find
的-printf '...\0'
和sort -z
產生的NUL封端的輸出的一種方法。
使用awk -F'\t' -v RS='\0' ...
是另一種。
注意find
的-printf
和sort
的-z
是非標準的,GNU的特定擴展,如使用'\0'
作爲RS
值與awk
。
- 1. Bash腳本順序文件大小
- 2. 按文件名順序打印文件
- 3. 按文件名內的日期順序列出目錄中的所有文件?
- 4. WP_Query - 按文件名順序附件?
- 5. Bash - 列表和排序文件及其大小和名稱和大小
- 6. 按文件名中的數字順序讀取文件
- 7. 在BASH腳本中按順序讀取文件
- 8. 如何在bash中按字母順序合併文件
- 9. newbie:php如何在文件名中按文件名的順序讀取
- 10. Bash腳本按大小排序文件數組
- 11. 列出大小大於N的文件
- 12. 按大小順序顯示目錄和文件c#
- 13. PHP(文件夾)按字母順序排列的文件列表?
- 14. 如何使用bash在目錄中輸出多個文件的文件大小?
- 15. 使用grunt按順序排列文件
- 16. 在Flash中按順序加載文件?
- 17. 重命名文件順序
- 18. BizTalk順序文件名
- 19. 命名文件順序
- 20. gitignore按文件大小?
- 21. 如何在C#Windows中獲取文件大小,文件名,文件擴展名?
- 22. 爲什麼bash不能區分文件名中的大小寫?
- 23. bash中大於100K的列表文件
- 24. PHP文件名和文件大小輸出
- 25. Bash命令遞歸列出文件,但按分類排序
- 26. Matlab dir('*。txt')命令未按順序列出txt文件
- 27. Umbraco輸出文件大小
- 28. writeRaster輸出文件大小
- 29. 在bash中按日期排序的文件列表
- 30. 在bash中重命名文件夾,文件和子文件夾
這將不會處理它們之間存在空間的文件,正如問題所示。 – Inian
@Inian爲什麼不呢? 'ls'將用空格處理文件,回車完美;我看到的* only *問題在於,OP打算將這個輸出用作腳本的輸入 - 但是您的答案並不能爲此提供解決方案。 –