木曜日, 1月 12, 2012

ls コマンドのファイル名ソート : 'ls' command sorting with alphabetical order

In ordinary case, we can obtain following output with using 'ls -lt' command.


[foo@machine]$      ls -lt


-rw-r--r-- 1 yokke yokke  43051  1月 12 21:59 D1000220.JPG
-rw-r--r-- 1 yokke yokke 329940  1月 12 08:13 D1000225.JPG
-rw-r--r-- 1 yokke yokke 318492  1月 12 07:59 b1000224.JPG
-rw-r--r-- 1 yokke yokke 308598  1月 12 07:59 D1000223.JPG
-rw-r--r-- 1 yokke yokke 315106  1月 12 07:59 D1000222.JPG
-rw-r--r-- 1 yokke yokke 319583  1月 12 07:58 D1000221.JPG
-rw-r--r-- 1 yokke yokke 350366  1月 11 08:13 D1000203.JPG
-rw-r--r-- 1 yokke yokke 319385  1月 11 08:07 C1000204.JPG
-rw-r--r-- 1 yokke yokke 333687  1月 11 08:06 D1000205.JPG
-rw-r--r-- 1 yokke yokke 327803  1月 11 08:06 D1000206.JPG
-rw-r--r-- 1 yokke yokke 325673  1月 11 07:58 D1000207.JPG
-rw-r--r-- 1 yokke yokke 298094  1月 11 07:58 a1000208.JPG
-rw-r--r-- 1 yokke yokke 310762  1月 11 07:57 D1000209.JPG
-rw-r--r-- 1 yokke yokke 240922  1月 10 19:11 D1000210.JPG
-rw-r--r-- 1 yokke yokke 290214  1月 10 19:11 D1000211.JPG
-rw-r--r-- 1 yokke yokke 262681  1月 10 19:11 D1000212.JPG
-rw-r--r-- 1 yokke yokke 275920  1月  8 18:19 G1000214.JPG
-rw-r--r-- 1 yokke yokke 310360  1月  8 18:19 d1000215.JPG
-rw-r--r-- 1 yokke yokke 307188  1月  8 12:03 D1000216.JPG
-rw-r--r-- 1 yokke yokke 261962  1月  8 09:54 11000217.JPG
-rw-r--r-- 1 yokke yokke 286347  1月  8 09:54 D1000218.JPG
-rw-r--r-- 1 yokke yokke 289542  1月  8 09:54 D1000219.JPG
-rw-r--r-- 1 yokke yokke 263363  9月 14 20:28 D1130202.JPG



In last column, we have obtained intended, non-alphabetical- order lists, with respect to filenames.

Now, we assume these filename should be obtained with alphabetical order, in addition, ignoring capital and lower cases. Namely, we would like to ignore the difference between 'A-' and 'a-'.

Unfortunately 'ls' command has no ignoring option of capital distinguishes.
So we have to use 'sort' command which contains ignore-case option.

Following script sample would obtain these problem solution.

#!/bin/bash

FileOutput="./ls_sort.log"

## obtaining original ls output
FileTmp="./tmp.txt"
nLine=`ls -lt | wc -l  | awk '(NR==1){printf("%d\n",$1)}'`
echo "ls list count : "${nLine}
nLine=$((nLine-1))
ls -lt | tail -n${nLine} > ${FileTmp}

## extract field count
nField=`awk '(NR==2){printf("%d\n",NF)}' ${FileTmp}`
echo "target column number : "${nField}

sort  --dictionary-order --ignore-case --key=${nField} ${FileTmp}
sort  --dictionary-order --ignore-case --key=${nField} ${FileTmp} > ${FileOutput}


Output derived from above script is shown in followings:

[foo@machine]$     ./align_alphabetical_order.sh

ls list count : 27
target column number : 9
-rw-r--r-- 1 yokke yokke 261962  1月  8 09:54 11000217.JPG
-rw-r--r-- 1 yokke yokke 298094  1月 11 07:58 a1000208.JPG
-rwxrwxr-x 1 yokke yokke    508  1月 12 22:44 align_alphabetical_order.sh
-rw-r--r-- 1 yokke yokke 318492  1月 12 07:59 b1000224.JPG
-rw-r--r-- 1 yokke yokke 319385  1月 11 08:07 C1000204.JPG
-rw-r--r-- 1 yokke yokke 350366  1月 11 08:13 D1000203.JPG
-rw-r--r-- 1 yokke yokke 333687  1月 11 08:06 D1000205.JPG
-rw-r--r-- 1 yokke yokke 327803  1月 11 08:06 D1000206.JPG
-rw-r--r-- 1 yokke yokke 325673  1月 11 07:58 D1000207.JPG
-rw-r--r-- 1 yokke yokke 310762  1月 11 07:57 D1000209.JPG
-rw-r--r-- 1 yokke yokke 240922  1月 10 19:11 D1000210.JPG
-rw-r--r-- 1 yokke yokke 290214  1月 10 19:11 D1000211.JPG
-rw-r--r-- 1 yokke yokke 262681  1月 10 19:11 D1000212.JPG
-rw-r--r-- 1 yokke yokke 310360  1月  8 18:19 d1000215.JPG
-rw-r--r-- 1 yokke yokke 307188  1月  8 12:03 D1000216.JPG
-rw-r--r-- 1 yokke yokke 286347  1月  8 09:54 D1000218.JPG
-rw-r--r-- 1 yokke yokke 289542  1月  8 09:54 D1000219.JPG
-rw-r--r-- 1 yokke yokke  43051  1月 12 21:59 D1000220.JPG
-rw-r--r-- 1 yokke yokke 319583  1月 12 07:58 D1000221.JPG
-rw-r--r-- 1 yokke yokke 315106  1月 12 07:59 D1000222.JPG
-rw-r--r-- 1 yokke yokke 308598  1月 12 07:59 D1000223.JPG
-rw-r--r-- 1 yokke yokke 329940  1月 12 08:13 D1000225.JPG
-rw-r--r-- 1 yokke yokke 263363  9月 14 20:28 D1130202.JPG
-rw-r--r-- 1 yokke yokke 275920  1月  8 18:19 G1000214.JPG
-rw-rw-r-- 1 yokke yokke   1510  1月 12 22:44 ls_sort.log
-rw-rw-r-- 1 yokke yokke      0  1月 12 22:58 tmp.txt

Do you understand?

0 件のコメント: