获取目录中的文件但不是子目录

时间:2016-09-13 09:58:15

标签: bash

我想获取目录中的所有文件,但不能获取该目录中的任何子目录。到目前为止我正在使用;

file=(path/to/my/files/*)

for f in ${files[@]}; do ...

3 个答案:

答案 0 :(得分:2)

跳过循环中的子目录:

for file in path/to/my/files/*; do
    [[ -d $file ]] && continue
    # do other stuff here
done

效率并不高,但您可以构建一个这样的文件数组:

files=()
for file in path/to/my/files/*; do
    [[ -d $file ]] || files+=( "$file" )
done

答案 1 :(得分:1)

使用GNU find执行此操作的正确无错误方法类似于

#!/bin/bash

while IFS= read -r -d '' file; do

    # Your script/command(s) goes here

done < <(find . -maxdepth 1 -mindepth 1 -type f -print0)

man find说明-mindepth-maxdepth字段

以下内容
-maxdepth levels
          Descend at most levels (a non-negative integer) levels of directories below the command line arguments.  -maxdepth 0
           means only apply the tests and actions to the command line arguments.

-mindepth levels
          Do not apply any tests or actions at levels less than levels (a non-negative integer).  -mindepth 1 means process all files except the command line arguments.

理想情况下,-mindepth 1-maxdepth 1不会超出在多个级别搜索文件,即限制在当前目录中。 -print0标志负责处理带有特殊字符的文件。

答案 2 :(得分:0)

在问题之前做好你的作业:)

如果您只想获取文件,那就简单了:

find <directory_name> -maxdepth 1 -type f

如果你想获取目录下的目录(只有1级:

find <directory_name> -maxdepth 1 -type d

你明白了

在bash脚本中(感谢@chepner的笔记):

#!/bin/bash

find . -maxdepth 1 -type f -print0 | while IFS= read -r -d '' file; do
    echo "$file" 
done