You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by lg...@apache.org on 2021/03/05 09:26:17 UTC

[mina-sshd] 07/07: Added SftpCommandMain 'lls' (local-LS) command support

This is an automated email from the ASF dual-hosted git repository.

lgoldstein pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mina-sshd.git

commit b62701572f621df5690fd65074e11df96fdf8965
Author: Lyor Goldstein <lg...@apache.org>
AuthorDate: Fri Mar 5 11:12:11 2021 +0200

    Added SftpCommandMain 'lls' (local-LS) command support
---
 .../apache/sshd/cli/client/SftpCommandMain.java    | 56 ++++++++++++++++++++++
 1 file changed, 56 insertions(+)

diff --git a/sshd-cli/src/main/java/org/apache/sshd/cli/client/SftpCommandMain.java b/sshd-cli/src/main/java/org/apache/sshd/cli/client/SftpCommandMain.java
index aa23166..066181f 100644
--- a/sshd-cli/src/main/java/org/apache/sshd/cli/client/SftpCommandMain.java
+++ b/sshd-cli/src/main/java/org/apache/sshd/cli/client/SftpCommandMain.java
@@ -117,6 +117,7 @@ public class SftpCommandMain extends SshClientCliSupport implements Channel {
                 new LcdCommandExecutor(),
                 new MkdirCommandExecutor(),
                 new LsCommandExecutor(),
+                new LlsCommandExecutor(),
                 new LStatCommandExecutor(),
                 new ReadLinkCommandExecutor(),
                 new RmCommandExecutor(),
@@ -709,6 +710,61 @@ public class SftpCommandMain extends SshClientCliSupport implements Channel {
 
     /* -------------------------------------------------------------------- */
 
+    private class LlsCommandExecutor implements SftpCommandExecutor {
+        LlsCommandExecutor() {
+            super();
+        }
+
+        @Override
+        public String getName() {
+            return "lls";
+        }
+
+        @Override
+        public boolean executeCommand(
+                String args, BufferedReader stdin, PrintStream stdout, PrintStream stderr)
+                throws Exception {
+            String[] comps = GenericUtils.split(args, ' ');
+            int numComps = GenericUtils.length(comps);
+            String pathArg = (numComps <= 0) ? null : GenericUtils.trimToEmpty(comps[numComps - 1]);
+            String flags = (numComps >= 2) ? GenericUtils.trimToEmpty(comps[0]) : null;
+            // ignore all flags
+            if ((GenericUtils.length(pathArg) > 0) && (pathArg.charAt(0) == '-')) {
+                flags = pathArg;
+                pathArg = null;
+            }
+
+            Path local = Paths.get(resolveLocalPath(pathArg)).normalize().toAbsolutePath();
+            if (Files.notExists(local)) {
+                stderr.println("File/Folder not found");
+            } else if (Files.isDirectory(local)) {
+                try (DirectoryStream<Path> ds = Files.newDirectoryStream(local)) {
+                    for (Path path : ds) {
+                        displayLocalPathInfo(path, stdout);
+                    }
+                }
+            } else if (Files.isRegularFile(local)) {
+                displayLocalPathInfo(local, stdout);
+            } else {
+                stderr.println("Unsupported special file");
+            }
+
+            return false;
+        }
+
+        protected void displayLocalPathInfo(Path path, PrintStream stdout) throws IOException {
+            stdout.append('\t').append(Objects.toString(path.getFileName()));
+            if (Files.isRegularFile(path)) {
+                stdout.append(' ').append(Long.toString(Files.size(path)));
+            } else {
+                stdout.append('/');
+            }
+            stdout.println();
+        }
+    }
+
+    /* -------------------------------------------------------------------- */
+
     private class RmCommandExecutor implements SftpCommandExecutor {
         RmCommandExecutor() {
             super();