mirror of
https://github.com/MidnightCommander/mc
synced 2024-12-23 21:06:52 +03:00
36d59acf97
fixed configure.ac added lib/vfs/mc-vfs/fish/Makefile.am lib/vfs/mc-vfs/fishdef.h moved lib/vfs/mc-vfs/fish/README.fish fixed lib/vfs/mc-vfs/Makefile.am added external scripts in lib/vfs/mc-vfs/fish/ * ls - get gile list * mkdir - make directory * rmdir - remove directory * unlink - delete file * chown - change owner/group of file * chmod - change mode of file * mv - move file * ln - make symlink * hardlink - make hardlink * send - copy file to target host * append - append file to target host (if exists) * get - copy file from target host * info - return resalts of scan remote host (have: perl, sed, awk, etc) Signed-off-by: Andrew Borodin <aborodin@vmail.ru> Signed-off-by: Ilia Maslakov <il.smind@gmail.com> fish.c: optimization and code cleanup Signed-off-by: Andrew Borodin <aborodin@vmail.ru> optimization of FISH environment variables. Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
161 lines
4.3 KiB
Plaintext
Executable File
161 lines
4.3 KiB
Plaintext
Executable File
#LIST /${FISH_DIR}
|
|
export LC_TIME=C
|
|
fish_list_lsq ()
|
|
{
|
|
FISH_DIR="$1"
|
|
ls -Qlan "${FISH_DIR}" 2>/dev/null | grep '^[^cbt]' | (
|
|
while read p l u g s m d y n; do
|
|
echo "P$p $u.$g"
|
|
echo "S$s"
|
|
echo "d$m $d $y"
|
|
echo ":$n"
|
|
echo
|
|
done
|
|
)
|
|
|
|
ls -Qlan "${FISH_DIR}" 2>/dev/null | grep '^[cb]' | (
|
|
while read p l u g a i m d y n; do
|
|
echo "P$p $u.$g"
|
|
echo "E$a$i"
|
|
echo "d$m $d $y"
|
|
echo ":$n"
|
|
echo
|
|
done
|
|
)
|
|
echo '### 200'
|
|
}
|
|
|
|
fish_list_sed ()
|
|
{
|
|
FISH_DIR="$1"
|
|
ls -lan "${FISH_DIR}" 2>/dev/null | grep '^[^cbt]' | (
|
|
while read p l u g s rec; do
|
|
if [ -n "$g" ]; then
|
|
if [ -n "$FISH_HAVE_DATE_MDYT" ]; then
|
|
filename=`echo "$rec"| sed 's/[^[:space:]]\+ \+[^[:space:]]\+ \+[^[:space:]]\+ //'`
|
|
filedate=`echo "$rec"| sed 's/\([^[:space:]]\+ \+[^[:space:]]\+ \+[^[:space:]]\+\) .*/\1/'`
|
|
else
|
|
filename=`echo "$rec"| sed 's/[^[:space:]]\+ \+[^[:space:]]\+ //'`
|
|
filedate=`echo "$rec"| sed 's/\([^[:space:]]\+ \+[^[:space:]]\+\) .*/\1/'`
|
|
fi
|
|
pfile=\"`echo "$filename" | sed -e 's#^\(.*\) -> \(.*\)#\1" -> "\2#'`\"
|
|
echo "P$p $u.$g"
|
|
echo "S$s"
|
|
if [ -n "$FISH_HAVE_DATE_MDYT" ]; then
|
|
echo "d$filedate"
|
|
else
|
|
echo "D$filedate"
|
|
fi
|
|
echo ":$pfile"
|
|
echo
|
|
fi
|
|
done
|
|
)
|
|
ls -lan "${FISH_DIR}" 2>/dev/null | grep '^[cb]' | (
|
|
while read p l u g a i rec; do
|
|
if [ -n "$g" ]; then
|
|
if [ -n "$FISH_HAVE_DATE_MDYT" ]; then
|
|
filename=`echo "$rec"| sed 's/[^[:space:]]\+ \+[^[:space:]]\+ \+[^[:space:]]\+ //'`
|
|
filedate=`echo "$rec"| sed 's/\([^[:space:]]\+ \+[^[:space:]]\+ \+[^[:space:]]\+\) .*/\1/'`
|
|
else
|
|
filename=`echo "$rec"| sed 's/[^[:space:]]\+ \+[^[:space:]]\+ //'`
|
|
filedate=`echo "$rec"| sed 's/\([^[:space:]]\+ \+[^[:space:]]\+\) .*/\1/'`
|
|
fi
|
|
pfile=\"`echo "$filename" | sed -e 's#^\(.*\) -> \(.*\)#\1" -> "\2#'`\"
|
|
echo "P$p $u.$g"
|
|
echo "E$a$i"
|
|
if [ -n "$FISH_HAVE_DATE_MDYT" ]; then
|
|
echo "d$filedate"
|
|
else
|
|
echo "D$filedate"
|
|
fi
|
|
echo ":$pfile"
|
|
echo
|
|
fi
|
|
done
|
|
)
|
|
echo '### 200'
|
|
}
|
|
|
|
fish_list_poor_ls ()
|
|
{
|
|
FISH_DIR="$1"
|
|
ls -lan "${FISH_DIR}" 2>/dev/null | grep '^[^cbt]' | (
|
|
while read p l u g s m d y n n2 n3; do
|
|
if [ -n "$g" ]; then
|
|
if [ "$m" = "0" ]; then
|
|
s=$d; m=$y; d=$n; y=$n2; n=$n3
|
|
else
|
|
n=$n" "$n2" "$n3
|
|
fi
|
|
echo "P$p $u $g"
|
|
echo "S$s"
|
|
echo "d$m $d $y"
|
|
echo ":"$n
|
|
echo
|
|
fi
|
|
done
|
|
)
|
|
ls -lan "${FISH_DIR}" 2>/dev/null | grep '^[cb]' | (
|
|
while read p l u g a i m d y n n2 n3; do
|
|
if [ -n "$g" ]; then
|
|
if [ "$a" = "0" ]; then
|
|
a=$m; i=$d; m=$y; d=$n; y=$n2; n=$n3
|
|
else
|
|
n=$n" "$n2" "$n3
|
|
fi
|
|
echo "P$p $u $g"
|
|
echo "S$s"
|
|
echo "d$m $d $y"
|
|
echo ":"$n
|
|
echo
|
|
fi
|
|
done
|
|
)
|
|
echo '### 200'
|
|
}
|
|
|
|
fish_list_perl ()
|
|
{
|
|
FISH_DIR=$1
|
|
perl -e '
|
|
use strict;
|
|
use POSIX;
|
|
use Fcntl;
|
|
use POSIX ":fcntl_h"; #S_ISLNK was here until 5.6
|
|
import Fcntl ":mode" unless defined &S_ISLNK; #and is now here
|
|
my $dirname = $ARGV[0];
|
|
if (opendir (DIR, $dirname)) {
|
|
while((my $filename = readdir (DIR))){
|
|
my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks) = lstat("$dirname/$filename");
|
|
my $mloctime= strftime("%%m-%%d-%%Y %%H:%%M", localtime $mtime);
|
|
my $strutils_shell_escape_regex = s/([;<>\*\|`&\$!#\(\)\[\]\{\}:'\''"\ \\])/\\$1/g;
|
|
my $e_filename = $filename;
|
|
$e_filename =~ $strutils_shell_escape_regex;
|
|
if (S_ISLNK ($mode)) {
|
|
my $linkname = readlink ("$dirname/$filename");
|
|
$linkname =~ $strutils_shell_escape_regex;
|
|
printf("R%%o %%o $uid.$gid\nS$size\nd$mloctime\n:\"$e_filename\" -> \"$linkname\"\n\n", S_IMODE($mode), S_IFMT($mode));
|
|
} else {
|
|
printf("R%%o %%o $uid.$gid\nS$size\nd$mloctime\n:\"$e_filename\"\n\n", S_IMODE($mode), S_IFMT($mode));
|
|
}
|
|
}
|
|
printf("### 200\n");
|
|
closedir(DIR);
|
|
} else {
|
|
printf("### 500\n");
|
|
}
|
|
exit 0
|
|
' "/${FISH_DIR}"
|
|
}
|
|
|
|
if [ -n "${FISH_HAVE_PERL}" ]; then
|
|
fish_list_perl "/${FISH_FILENAME}"
|
|
elif [ -n "${FISH_HAVE_LSQ}" ]; then
|
|
fish_list_lsq "/${FISH_FILENAME}"
|
|
elif [ -n "${FISH_HAVE_SED}" ]; then
|
|
fish_list_sed "/${FISH_FILENAME}"
|
|
else
|
|
fish_list_poor_ls "/${FISH_FILENAME}"
|
|
fi
|