我有名称格式为 YYYYMMDD 的文件夹列表,我正在尝试使用 awk 命令获取日期范围内的文件夹子集。但是,它不包括右侧边界上的文件夹名称。
目录列表:
bash-4.2# ls -d */
20240111/ 20240112/ 20240113/ 20240114/ 20240115/ 20240118/ 20240120/ dest/ test-files/ test/
注意: 该文件夹还可能包含名称不是 YYYYMMDD 格式的子文件夹。例如上面的“test-files/”
AWK 命令获取子文件夹名称的范围 (20240114 - 20240120):
bash-4.2# ls -d */ | awk -v start=20240114 -v end=20240120 '{d=substr($0,0); if (d>=start&&d<=end) print}'
20240114/
20240115/
20240118/
这里,虽然if条件有小于等于条件“d<=end" the output is not including folder with name "20240120/". Not sure why this one is not included in the result.
另外,请注意,我对高级 Linux 命令没有太多经验。因此,请告知上述命令是否正确并且始终有效。例如,如果存在任何具有意外名称的子文件夹,此命令是否有可能返回错误的结果。
20240120/
在 20240120
之后进行整理,您的范围不包括它。这样做:
awk -F / -v start=20240114 -v end=20240120 '$1 >= start && $1 <= end'
问题在于名称末尾的
/
。 20240120/
高于 20240120
。
您应该将其添加到
start
和 end
变量中。
ls -d */ | awk -v start=20240114/ -v end=20240120/ '{d=substr($0,0); if (d>=start&&d<=end) print}'