需要一次处理一个当前目录中的文件。我正在寻找一种方法来获取ls
或find
的输出并将结果值存储为数组的元素。这样我就可以根据需要操作数组元素。
答案 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将对返回的每个项目采取行动。