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 <lgoldst...@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();

Reply via email to