因此,我試圖對大量文件執行批處理,但我希望批處理先從最小的文件開始。我需要做的是按升序獲取所有文件名,按文件大小排序。我見過一些例子,但一個問題是一些文件名包含空格,連字符,下劃線和其他特殊字符,所以我找不到任何適合我的東西。在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. 按文件大小排序排列樹
- 5. WP_Query - 按文件名順序附件?
- 6. Bash - 列表和排序文件及其大小和名稱和大小
- 7. 在bash中按照排序順序將文件寫入磁盤
- 8. 使用bash腳本以自然順序列出文件夾中的文件
- 9. Bash確定文件大小
- 10. Bash腳本 - 文件大小
- 11. 按文件名中的數字順序讀取文件
- 12. 按數字順序排序並列出目錄中的文件
- 13. 按順序重命名fasta頭文件
- 14. 如何在bash中按字母順序合併文件
- 15. 在BASH腳本中按順序讀取文件
- 16. Bash:按順序在目錄中打開多個文件
- 17. newbie:php如何在文件名中按文件名的順序讀取
- 18. 在Bash中每個文本文件的列表文件名達到最大值
- 19. Bash腳本按大小排序文件數組
- 20. 如何將大文件按字母順序拆分爲更小的文件?
- 21. 列出大小大於N的文件
- 22. 按大小順序顯示目錄和文件c#
- 23. PHP(文件夾)按字母順序排列的文件列表?
- 24. 在bash文本文件中複製文件名列表
- 25. 使用grunt按順序排列文件
- 26. 按數字順序列出文件而不是按字母順序?
- 27. 如何使用bash在目錄中輸出多個文件的文件大小?
- 28. Bash如果文件大小大於1kb
- 29. 在Flash中按順序加載文件?
- 30. 按名稱按時間順序重命名文件夾內的文件
這將不會處理它們之間存在空間的文件,正如問題所示。 – Inian
@Inian爲什麼不呢? 'ls'將用空格處理文件,回車完美;我看到的* only *問題在於,OP打算將這個輸出用作腳本的輸入 - 但是您的答案並不能爲此提供解決方案。 –