将ls -R输出解析为Unix中的变量

时间:2013-02-26 11:03:05

标签: linux bash shell unix scripting

我正在执行ls-R /files/

我得到了以下输出

./:    nvision
./nvision:    layout
./nvision/layout:    abcd.txt 

我希望在列表中找到路径,如

/nvision
/nvision/layout/
/nvision/layout/abcd.txt

我应该能够将所需的路径复制到变量

ps:我不是在寻找nvision 我正在尝试获取files文件夹

下的文件夹和文件列表

任何人都可以帮助我

3 个答案:

答案 0 :(得分:4)

您是否尝试过使用find (see reference)

获取当前目录中的文件和文件夹列表就像find .一样简单。将更改为任何路径以获取该路径中的文件和目录列表:

nvision
nvision/abcd.txt
nvision/layout

将其保存到变量

var=`find .`

并为每一行添加初始斜杠(如果需要)

var=`find . -exec echo /{} \;`

这里 var 没有特殊含义,它只是变量名。

要稍后使用该变量,您可以使用$var${var}。例如,要打印它或将其保存到文件:

# Print the variable content
echo $var

# Save the content of var to a file
echo $var > /tmp/file.txt

答案 1 :(得分:2)

你应该真的使用find来做这些事情。只需使用find directory即可。如果您需要更具体的输出格式,则可以使用find的{​​{1}}选项。 Find是一个非常强大的工具,也允许各种过滤。请务必查看文档以获取更多信息:GNU FindUtils

要将结果存储在变量中,请使用以下语句之一:

-printf

result=`find ...`

您还可以使用find使用result=$(find ...) 的{​​{1}}选项直接执行每个匹配的命令。再次,请务必查看文档。这真的很全面。

更新(Mac / UNIX用户 - Linux用户不受影响)

BSD find需要一条路径。使用

-exec

而不仅仅是

find

如果您需要工作目录中所有文件的列表。

答案 2 :(得分:1)

答案就是这个页面你应该使用find,它列出了你可以定义的所有文件

在哪里。是当前文件夹否则替换。与您希望搜索的路径

find .-type d -print 

仅列出目录或查找

find . -type f -print

将仅列出所有文件

如果您正在寻找两者

find . -print

如果您只想定义递归级别,请尝试

find . -maxdepth 1 -print

这是一个脚本

#!/bin/bash
for names in $(find . -type f -print); do
    echo $names
done