如何将当前目录中的文件添加到数组中

时间:2012-02-29 03:11:12

标签: linux bash shell

#! /bin/bash


dir=$(find . -type f)

echo ${dir[0]}
echo "This is dir[0]"
echo ${dir[1]}

我想将当前dir中递归的所有文件添加到数组arr []中,但上面的代码失败,

zhangyf@zhangyf-desktop:~/test/avatar$ ./new.sh 
./daily_burn.sh ./test.sh ./.gitignore ./new.sh 
This is dir[0]

dir不是此代码中的数组。什么是正确的方法?谢谢!

3 个答案:

答案 0 :(得分:1)

dir=(`find . -type f`)

echo ${dir[0]}
echo ${dir[1]}

答案 1 :(得分:1)

dir=$(find . -type f)

应该是

dir=(`find . -type f`)

答案 2 :(得分:1)

这是一个针对您想要的小型完整shell测试 - 在安全的地方执行,例如而在/ tmp:

# Prepare
rm -rf root

mkdir root
mkdir root/1
touch root/1/a
touch root/1/b
#touch root/1/"b with spaces"
mkdir root/2
touch root/2/c
mkdir root/2/3
touch root/2/3/d

# Find
echo --- Find
find root

# Test
echo --- Test
files=(`find root -type f`)
echo $files

# Print whole array
flen=${#files[*]}
for (( i=0; i < $flen; i++ )); do
  echo files[$i] = ${files[i]}
done

这个输出是:

--- Find
root
root/1
root/1/a
root/1/b
root/2
root/2/c
root/2/3
root/2/3/d
--- Test
root/1/a
files[0] = root/1/a
files[1] = root/1/b
files[2] = root/2/c
files[3] = root/2/3/d

请注意文件中的空格 - 如果您通过删除此行前面的#取消注释上面的注释触摸:

#touch root/1/"b with spaces"

您将获得以下内容:

--- Find
root
root/1
root/1/b with spaces
root/1/a
root/1/b
root/2
root/2/c
root/2/3
root/2/3/d
--- Test
root/1/b
files[0] = root/1/b
files[1] = with
files[2] = spaces
files[3] = root/1/a
files[4] = root/1/b
files[5] = root/2/c
files[6] = root/2/3/d

显然,你可以这样做:

希望这有帮助。