我想得到一个文件列表,然后将结果读入一个数组,其中每个数组元素对应一个文件名。这可能吗?
答案 0 :(得分:92)
请勿使用ls
,not intended用于此目的。使用globbing。
shopt -s nullglob
array=(*)
array2=(file*)
array3=(dir/*)
如果没有匹配项,nullglob
选项会导致数组为空。
答案 1 :(得分:16)
以下将在当前目录中创建一个带有ls输出的数组arr:
arr=( $(ls) )
虽然使用ls
的输出完全不安全。
比ls
更好,更安全,您可以使用echo *
:
arr=( * )
echo ${#arr[@]} # will echo number of elements in array
echo "${arr[@]}" # will dump all elements of the array
答案 2 :(得分:3)
实际上,ls
不是可行的方法。试试这个:
declare -a FILELIST
for f in *; do
#FILELIST[length_of_FILELIST + 1]=filename
FILELIST[${#FILELIST[@]}+1]=$(echo "$f");
done
要从数组中获取文件名,请使用:
echo ${FILELIST[x]}
从x开始从数组中获取n个文件名:
echo ${FILELIST[@]:x:n}
有关bash数组的精彩教程,请参阅: http://www.thegeekstuff.com/2010/06/bash-array-tutorial/
答案 3 :(得分:0)
试试这个,
<couchbase:clusterInfo login="${cluster.username}" password="${cluster.password}" id="clusterInfo" />
<couchbase:bucket bucketName="${bucket.name}" bucketPassword="${bucket.password}" id="bucket"/>
<!-- template is just using default parameters and references as well -->
<couchbase:template translation-service-ref="myCustomTranslationService" />
<bean id="myCustomTranslationService"
class="org.springframework.data.couchbase.core.convert.translation.JacksonTranslationService"/>
<bean id="couchbaseTemplate" class="org.springframework.data.couchbase.core.CouchbaseTemplate">
<constructor-arg ref="clusterInfo"/>
<constructor-arg ref="bucket" />
<constructor-arg ref="myCustomTranslationService" />
</bean>
<bean id="repositoryOperationsMapping" class="org.springframework.data.couchbase.repository.config.RepositoryOperationsMapping">
<constructor-arg ref="couchbaseTemplate"/>
</bean>
我假设您稍后会从列表中删除不需要的内容。
答案 4 :(得分:0)
在bash中,您可以创建具有路径名扩展(globbing)的文件名数组,如下所示:
#!/bin/bash
SOURCE_DIR=path/to/source
files=(
"$SOURCE_DIR"/*.tar.gz
"$SOURCE_DIR"/*.tgz
"$SOURCE_DIR"/**/*
)
上面的代码将创建一个名为files
的数组,并向其中添加N个数组元素,其中数组中的每个元素对应于SOURCE_DIR
或{{1 }},或者其子目录中具有子目录递归功能的任何项目,例如注释中的Dennis points out。
然后您可以使用.tar.gz
来查看包含路径的数组的内容:
.tgz
或使用参数替换排除路径名:
printf