将文件名读入数组

时间:2012-06-11 13:50:01

标签: bash unix cygwin

我想得到一个文件列表,然后将结果读入一个数组,其中每个数组元素对应一个文件名。这可能吗?

5 个答案:

答案 0 :(得分:92)

请勿使用lsnot 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