如何捕获ls或find命令的输出以将所有文件名存储在数组中?

时间:2011-01-13 09:18:35

标签: arrays bash find capture ls

需要一次处理一个当前目录中的文件。我正在寻找一种方法来获取lsfind的输出并将结果值存储为数组的元素。这样我就可以根据需要操作数组元素。

4 个答案:

答案 0 :(得分:47)

要回答您的确切问题,请使用以下内容:

arr=( $(find /path/to/toplevel/dir -type f) )

实施例

$ find . -type f
./test1.txt
./test2.txt
./test3.txt
$ arr=( $(find . -type f) )
$ echo ${#arr[@]}
3
$ echo ${arr[@]}
./test1.txt ./test2.txt ./test3.txt
$ echo ${arr[0]}
./test1.txt

但是,如果您只想一次处理一个文件,如果脚本有点简单,您可以使用find的{​​{1}}选项,或者您可以对找到的内容进行循环像这样返回:

-exec

答案 1 :(得分:9)

for i in `ls`; do echo $i; done;

不能比那简单!

编辑:嗯 - 根据丹尼斯威廉姆森的评论,你似乎可以!

编辑2:虽然OP专门询问如何解析ls的输出,但我只想指出,正如下面的评论员所说,正确答案是“你没有”。请改用for i in *或类似名称。

答案 2 :(得分:4)

实际上,您不需要对当前目录中的文件使用ls / find。

只需使用for循环:

for files in *; do 
    if [ -f "$files" ]; then
        # do something
    fi
done

如果您也想处理隐藏文件,可以设置相对选项:

shopt -s dotglob

这最后一个命令仅适用于bash。

答案 3 :(得分:-1)

根据您的目的,您可以使用xargs:

ls directory | xargs cp -v dir2

例如。 xargs将对返回的每个项目采取行动。