如何仅使用 ls 命令列出文件/目录的完整路径(在受限 shell 中工作)

如何仅使用 ls 命令列出文件/目录的完整路径(在受限 shell 中工作)

我公司生产环境服务器上的 shell 受到限制,因此我只有少数命令选择。

我试图仅使用以下命令获取文件/目录的完整路径LS命令。我不能在受限 shell 中使用 xargs、sed、awk、find,因此我只剩下使用 ls 命令中的选项。

我已经尝试过以下命令,但这不会递归。我提到这一点是因为我在寻找问题答案时遇到了这个命令。

ls -lRt -d -1 $PWD/{*,.*}

以下是我在受限 shell 中可用的所有命令的列表。让我说清楚。我无法创建任何功能,我不能使用命令。

/usr/bin/cat
/usr/bin/clear
/usr/bin/cmp
/usr/bin/cut
/usr/bin/date
/usr/bin/df
/usr/bin/diff
/usr/bin/du
/usr/bin/grep
/usr/bin/head
/usr/bin/id
/usr/bin/ls
/usr/bin/od
/usr/bin/prstat
/usr/bin/ps
/usr/bin/sort
/usr/bin/tail
/usr/bin/wc
/usr/bin/which
/usr/bin/who
cd
echo
exit
pwd

答案1

当 echo 可用时,该命令应该执行此操作。

ls -Rr1 . |  while read line; do case $line in *:) basepath=${line%:};; "") basepath=;; *) echo "$basepath/$line";; esac; done

答案2

无法判断bash中实现了哪个子集rbash。如果你幸运的话,可以尝试一下

shopt -s globstar ## bash built in 
ls **/* *

*列出当前目录中的文件,并**/*列出所有子目录中的所有文件,无论深度如何)。

答案3

以下函数将以/深度优先顺序列出目录中的所有文件(默认情况下),而不使用 Even ls

lsr(){
        for f in "$1/"* "$1/".[!.]* "$1/"..?*; do
                test -e "$f" && echo "$f"
                test -d "$f" && lsr "$f"
        done
}

例子:

$ lsr .
./dir
./dir/file
./dir/.dotfile
./.foo
./..bar
$ find . -depth
./dir/.dotfile
./dir/file
./dir
./.foo
./..bar
.

可以将其制作成单独的脚本而不是函数:

#! /bin/sh
for f in "$1/"* "$1/".[!.]* "$1/"..?*; do
        test -e "$f" && echo "$f"
        test -d "$f" && "$0" "$f"
done

相关内容