Ticket #2242 (improved FISH)
[midnight-commander.git] / lib / vfs / mc-vfs / fish / ls
blob2c0997bf3f60e2e456177e63b0c0e03adc6b1ecb
1 #LIST /${FISH_DIR}
2 export LC_TIME=C
3 fish_list_lsq ()
5 FISH_DIR="$1"
6 ls -Qlan "${FISH_DIR}" 2>/dev/null | grep '^[^cbt]' | (
7 while read p l u g s m d y n; do
8     echo "P$p $u.$g"
9     echo "S$s"
10     echo "d$m $d $y"
11     echo ":$n"
12     echo
13 done
16 ls -Qlan "${FISH_DIR}" 2>/dev/null | grep '^[cb]' | (
17 while read p l u g a i m d y n; do
18     echo "P$p $u.$g"
19     echo "E$a$i"
20     echo "d$m $d $y"
21     echo ":$n"
22     echo
23 done
25 echo '### 200'
28 fish_list_sed ()
30 FISH_DIR="$1"
31 ls -lan "${FISH_DIR}"  2>/dev/null | grep '^[^cbt]' | (
32 while read p l u g s rec; do
33     if [ -n "$g" ]; then
34         if [ -n "$FISH_HAVE_DATE_MDYT" ]; then
35             filename=`echo "$rec"| sed 's/[^[:space:]]\+ \+[^[:space:]]\+ \+[^[:space:]]\+ //'`
36             filedate=`echo "$rec"| sed 's/\([^[:space:]]\+ \+[^[:space:]]\+ \+[^[:space:]]\+\) .*/\1/'`
37         else
38             filename=`echo "$rec"| sed 's/[^[:space:]]\+ \+[^[:space:]]\+ //'`
39             filedate=`echo "$rec"| sed 's/\([^[:space:]]\+ \+[^[:space:]]\+\) .*/\1/'`
40         fi
41         pfile=\"`echo "$filename" | sed -e 's#^\(.*\) -> \(.*\)#\1" -> "\2#'`\"
42         echo "P$p $u.$g"
43         echo "S$s"
44         if [ -n "$FISH_HAVE_DATE_MDYT" ]; then
45             echo "d$filedate"
46         else
47             echo "D$filedate"
48         fi
49         echo ":$pfile"
50         echo
51     fi
52 done
54 ls -lan "${FISH_DIR}" 2>/dev/null | grep '^[cb]' | (
55 while read p l u g a i rec; do
56     if [ -n "$g" ]; then
57         if [ -n "$FISH_HAVE_DATE_MDYT" ]; then
58             filename=`echo "$rec"| sed 's/[^[:space:]]\+ \+[^[:space:]]\+ \+[^[:space:]]\+ //'`
59             filedate=`echo "$rec"| sed 's/\([^[:space:]]\+ \+[^[:space:]]\+ \+[^[:space:]]\+\) .*/\1/'`
60         else
61             filename=`echo "$rec"| sed 's/[^[:space:]]\+ \+[^[:space:]]\+ //'`
62             filedate=`echo "$rec"| sed 's/\([^[:space:]]\+ \+[^[:space:]]\+\) .*/\1/'`
63         fi
64         pfile=\"`echo "$filename" | sed -e 's#^\(.*\) -> \(.*\)#\1" -> "\2#'`\"
65         echo "P$p $u.$g"
66         echo "E$a$i"
67         if [ -n "$FISH_HAVE_DATE_MDYT" ]; then
68             echo "d$filedate"
69         else
70             echo "D$filedate"
71         fi
72         echo ":$pfile"
73         echo
74     fi
75 done
77 echo '### 200'
80 fish_list_poor_ls ()
82 FISH_DIR="$1"
83 ls -lan "${FISH_DIR}" 2>/dev/null | grep '^[^cbt]' | (
84 while read p l u g s m d y n n2 n3; do
85     if [ -n "$g" ]; then
86         if [ "$m" = "0" ]; then
87             s=$d; m=$y; d=$n; y=$n2; n=$n3
88         else
89             n=$n" "$n2" "$n3
90         fi
91         echo "P$p $u $g"
92         echo "S$s"
93         echo "d$m $d $y"
94         echo ":"$n
95         echo
96     fi
97 done
99 ls -lan "${FISH_DIR}" 2>/dev/null | grep '^[cb]' | (
100 while read p l u g a i m d y n n2 n3; do
101     if [ -n "$g" ]; then
102         if [ "$a" = "0" ]; then
103             a=$m; i=$d; m=$y; d=$n; y=$n2; n=$n3
104         else
105             n=$n" "$n2" "$n3
106         fi
107         echo "P$p $u $g"
108         echo "S$s"
109         echo "d$m $d $y"
110         echo ":"$n
111         echo
112     fi
113 done
115 echo '### 200'
118 fish_list_perl ()
120 FISH_DIR=$1
121 perl -e '
122 use strict;
123 use POSIX;
124 use Fcntl;
125 use POSIX ":fcntl_h"; #S_ISLNK was here until 5.6
126 import Fcntl ":mode" unless defined &S_ISLNK; #and is now here
127 my $dirname = $ARGV[0];
128 if (opendir (DIR, $dirname)) {
129 while((my $filename = readdir (DIR))){
130     my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks) = lstat("$dirname/$filename");
131     my $mloctime= strftime("%%m-%%d-%%Y %%H:%%M", localtime $mtime);
132     my $strutils_shell_escape_regex = s/([;<>\*\|`&\$!#\(\)\[\]\{\}:'\''"\ \\])/\\$1/g;
133     my $e_filename = $filename;
134     $e_filename =~ $strutils_shell_escape_regex;
135     if (S_ISLNK ($mode)) {
136         my $linkname = readlink ("$dirname/$filename");
137         $linkname =~ $strutils_shell_escape_regex;
138         printf("R%%o %%o $uid.$gid\nS$size\nd$mloctime\n:\"$e_filename\" -> \"$linkname\"\n\n", S_IMODE($mode), S_IFMT($mode));
139     } else {
140         printf("R%%o %%o $uid.$gid\nS$size\nd$mloctime\n:\"$e_filename\"\n\n", S_IMODE($mode), S_IFMT($mode));
141     }
143     printf("### 200\n");
144     closedir(DIR);
145 } else {
146     printf("### 500\n");
148 exit 0
149 ' "/${FISH_DIR}"
152 if [ -n "${FISH_HAVE_PERL}" ]; then
153     fish_list_perl "/${FISH_FILENAME}"
154 elif [ -n "${FISH_HAVE_LSQ}" ]; then
155     fish_list_lsq "/${FISH_FILENAME}"
156 elif [ -n "${FISH_HAVE_SED}" ]; then
157     fish_list_sed "/${FISH_FILENAME}"
158 else
159     fish_list_poor_ls "/${FISH_FILENAME}"