2012-03-26 914 views

回答

8

你可以这样做

for i in `ls`; do LEN=`expr length $i`; echo $LEN $i; done | sort -n 
+0

我认为这是基于文件的大小排序,我希望它基于文件名 – 2012-03-26 08:49:06

+0

的长度约抱歉进行排序。让我找到合适的人并转贴 – Raghuram 2012-03-26 08:59:14

+0

添加新代码...立即查看 – Raghuram 2012-03-26 09:10:17

2

化妆测试文件:

mkdir -p test; cd test 
touch short-file-name medium-file-name loooong-file-name 

脚本:

ls |awk '{print length($0)"\t"$0}' |sort -n |cut --complement -f1 

输出:

short-file-name 
medium-file-name 
loooong-file-name 
+0

前两种解决方案正常工作。感谢所有的答复。 – 2012-03-26 12:50:37

4

最简单的方法就是:

$ ls | perl -e 'print sort { length($b) <=> length($a) } <>' 
+0

上面的Raghuram的回答在我的FreeBSD中并不适用于bash shell,但是这样做了。得爱perl。谢谢。 – 2015-05-23 01:38:02

0
for i in *; do printf "%d\t%s\n" "${#i}" "$i"; done | sort -n | cut -f2-