Filenames
如何按文件名對文件路徑列表進行排序?
我在名為 files.txt 的文本文件中有以下文件列表:
./themes/seven/images/list-item-rtl.png ./themes/seven/images/arrow-desc.png ./themes/seven/images/arrow-prev.png ./themes/seven/images/fc-rtl.png ./themes/seven/ie7.css ./xmlrpc.php ./MAINTAINERS.txt ./update.php ./README.txt ./COPYRIGHT.txt ./web.config
我想僅按文件名對它們進行排序(按最後一次出現正斜杠後的第一個字元排序)。所以上面會像這樣輸出:
./COPYRIGHT.txt ./MAINTAINERS.txt ./README.txt ./themes/seven/images/arrow-desc.png ./themes/seven/images/arrow-prev.png ./themes/seven/images/fc-rtl.png ./themes/seven/ie7.css ./themes/seven/images/list-item-rtl.png ./update.php ./web.config ./xmlrpc.php
我該怎麼做呢?
$ awk -F '/' '{ printf "%s/%s\n", $NF, $0 }' files.txt | sort | cut -d '/' -f 2- ./COPYRIGHT.txt ./MAINTAINERS.txt ./README.txt ./themes/seven/images/arrow-desc.png ./themes/seven/images/arrow-prev.png ./themes/seven/images/fc-rtl.png ./themes/seven/ie7.css ./themes/seven/images/list-item-rtl.png ./update.php ./web.config ./xmlrpc.php
這會將文件名的副本添加到行首,後跟一個
/
字元。文件名是通過最後一個/
-delimited 欄位獲得的。最後一個欄位$NF
在awk
.命令的輸出
awk
被排序。此排序將使用/
添加到行首的 -delimited 欄位。cut
然後用於刪除添加的/
- 分隔欄位。只要沒有路徑名包含文字換行符,這種方法就可以工作。
如果任何路徑名以
/
字元結尾(可能是目錄的路徑名),也可能存在問題。這些將在排序列中產生一個空字元串。參見:施瓦茨變換