Filenames

如何按文件名對文件路徑列表進行排序?

  • March 1, 2021

我在名為 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 欄位獲得的。最後一個欄位$NFawk.

命令的輸出awk被排序。此排序將使用/添加到行首的 -delimited 欄位。 cut然後用於刪除添加的/- 分隔欄位。

只要沒有路徑名包含文字換行符,這種方法就可以工作。

如果任何路徑名以/字元結尾(可能是目錄的路徑名),也可能存在問題。這些將在排序列中產生一個空字元串。

參見:施瓦茨變換

引用自:https://unix.stackexchange.com/questions/636978