2012-03-26 54 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-