首页 > 解决方案 > For 循环仅遍历那些可用的文件

问题描述

假设我有 2020 年 1 月和 2019 年全年的月度数据文件,我想遍历所有可用月份以执行一些操作。这是我最接近的尝试

for month in {01..12}; do
    for year in 2019 2020; do
        cat this_file-${year}-${month} | grep this_word -i
    done
done

它的工作原理是我可以看到 13 个月的输出,但随后也会在 2020 年的所有月份中返回“没有这样的文件或目录”,但 Jan 除外(因为这是我在 2020 年拥有数据文件的唯一月份),这使得直接从终端复制输出变得很痛苦。任何指针?

因为我在 shell 上运行我的命令,所以单行解决方案将是完美的。

标签: bashunix

解决方案


使用大括号扩展,您可以执行以下操作:

grep -i 'this_word' file-{2019..2020}-{01..12} 2>/dev/null

通过将 stderr 重定向到/dev/null.


推荐阅读