Acho que o seguinte comando chega perto:
sed -r 's:([^/]*/):d:g; s:([^/]+)$:f:' foo.txt |
sort |
sed -r 's:/f:/:; s:d([^/]*/)::g'
O que isso faz? O primeiro comando sed
adiciona um d
ao início de cada diretório (procurando sequências que terminam com /
) e um f
aos arquivos - aqueles que não terminam com /
. Em seguida, aplicamos sort
- e como d
classifica antes de f
, os diretórios são classificados primeiro. O segundo sed
desfaz o primeiro.
Para a entrada de exemplo:
$ sed -r 's:([^/]*/):d:g; s:([^/]+)$:f:' foo.txt |
sort |
sed -r 's:/f:/:; s:d([^/]*/)::g'
bash /etc/skel/
bash /etc/skel/new/backups/
bash /etc/skel/new/file
bash /etc/skel/old/backups/
bash /etc/skel/old/file
bash /etc/skel/file
bash /etc/skel/filenew
bash /etc/file
bash /etc/filenew
bash /usr/
bash /usr/bin/
bash /usr/bin/file
bash /usr/sbin/
bash /usr/sbin/file.sbin