【问题标题】:Iterate over the files of a given folder - Bash遍历给定文件夹的文件 - Bash
【发布时间】:2021-04-29 09:37:18
【问题描述】:

当我想遍历给定文件夹中的文件时,我通常会这样做:

for folder in $DIR/Runfirstall/*

但我在一些代码中发现了这一点:

for folder in $DIR/!(Runfirstall)/

也一样吗?

【问题讨论】:

  • 尾随 / 仅返回目录。这会将所有目录而不是名称 RunInstall 分配给$folder。另一方面,for folder in $DIR/Runfirstall/* 将包括文件(& 东西...)以及目录。

标签: bash loops


【解决方案1】:

没有。 !(...) 是一个扩展的 glob 模式,需要 shopt -s extglob。它匹配除Runfirstall 之外的任何内容,即它将扩展到$DIR 除了 Runfirstall 下的所有目录。它不会在 Runfirstall 或 $DIR 的任何其他子目录下列出任何内容。

#!/bin/bash
mkdir dir1 dir2
touch file1 file2
touch dir1/file1-{1..3}
mkdir dir1/dir1-{1..3}
touch dir1/dir1-{1..3}/file1-1-{1..2}

DIR=.

for f in "$DIR"/dir1/*   ; do echo "$f" ; done
echo '---'
shopt -s extglob
for f in "$DIR"/!(dir1)/ ; do echo "$f" ; done

输出:

./dir1/dir1-1
./dir1/dir1-2
./dir1/dir1-3
./dir1/file1-1
./dir1/file1-2
./dir1/file1-3
---
./dir2/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-26
    • 2023-03-03
    • 2017-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多