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();