我公司生产环境服务器上的 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