我正在开发一个项目,该项目使用非常有限的 Linux busybox shell。
我的 shell 没有
find
、awk
、grep
等命令,我正在尝试获取该计算机上的完整文件列表。
到目前为止还没有运气,但是运行
ls -la /*
完成了一半的工作并显示了一层深度的文件。ls
来获取文件和文件夹的完整列表吗?也许您知道其他方法吗?
编辑#1:
我的 ls 没有 -R 选项。
ls -1 -LR /
ls: invalid option -- R
BusyBox v1.01 multi-call binary
Usage: ls [-1AacCdeilnLrSsTtuvwxXk] [filenames...]
List directory contents
Options:
-1 list files in a single column
-A do not list implied . and ..
-a do not hide entries starting with .
-C list entries by columns
-c with -l: show ctime
-d list directory entries instead of contents
-e list both full date and full time
-i list the i-node for each file
-l use a long listing format
-n list numeric UIDs and GIDs instead of names
-L list entries pointed to by symbolic links
-r sort the listing in reverse order
-S sort the listing by file size
-s list the size of each file, in blocks
-T NUM assume Tabstop every NUM columns
-t with -l: show modification time
-u with -l: show access time
-v sort the listing by version
-w NUM assume the terminal is NUM columns wide
-x list entries by lines instead of by columns
-X sort the listing by extension
从BusyBox的页面我可以看到你有
ls
的选项-R
:
-R 递归列出子目录
所以你可以写:
$ ls -R /
由于您没有
-R
选项,您可以尝试使用如下递归 shell 函数:
myls() {
for item in "$1"/* "$1"/.*; do
[ -z "${item##*/.}" -o -z "${item##*/..}" -o -z "${item##*/\*}" ] && continue
if [ -d "$item" ]; then
echo "$item/"
myls "$item"
else
echo "$item"
fi
done
}
然后你可以不带参数地调用它,从
/
开始。
$ myls
如果您想从
/home
开始:
$ myls /home
如果你想制作脚本:
#!/bin/sh
# copy the function here
myls "$1"
[ -z "${item##*/.}" -o -z "${item##*/..}" -o -z "${item##*/\*}" ] && continue
此行仅排除目录 .
和 ..
以及未展开的项目(如果文件夹中没有文件,shell 会将模式保留为 <some_folder>/*
)。*
../
以改进输出,然后为该目录递归调用该函数。替代方案,对于
BusyBox
,如问题中所注意到的。您可以尝试使用 find
命令递归列出文件。
find /tmp
/tmp
/tmp/vintage_net
/tmp/vintage_net/wpa_supplicant
/tmp/vintage_net/wpa_supplicant/p2p-dev-wlan0
/tmp/vintage_net/wpa_supplicant/wlan0.ex
/tmp/vintage_net/wpa_supplicant/wlan0
/tmp/vintage_net/wpa_supplicant.conf.wlan0
/tmp/resolv.conf
/tmp/beam_notify-89749473
/tmp/nerves_time_comm
使用
ls -1 -LR /
垂直格式看起来也不错