【发布时间】:2012-10-14 22:48:54
【问题描述】:
这是我的问题:我必须解决用户可配置的各种文件名/位置(数据目录可能有子目录)。如果我可以在循环之前完全解析文件名,则以下脚本有效:
[提示] 更多 test.sh #! /usr/bin/env bash 新文件=实际文件名 对于`find -L ${FILE_PATH}/data -type d`中的目录;做 `ls -1 ${directory}/${newfile} 2>/dev/null` 中的文件名;做 如果 [[ -r ${文件名} ]];然后 echo "找到 ${filename}" 菲 完毕 完毕 [提示] ./test.sh [提示] 找到 ${SOME_PATH}/actual-filename但是,如果 newfile 中有任何通配符,则内部循环将不会运行。即使它只返回一个文件。
我会将 find 与一些正则表达式一起使用,但要自动生成正确的表达式并替换某些东西会很棘手(例如 pgb.f0010{0930,1001}{00,06,12,18} 与一些与 2010 年 9 月 30 日和 10 月 1 日相关联的文件,第一个分组是由我的脚本为提供的日期计算的)。
pgb.f0010093000 pgb.f0010093006 pgb.f0010093012 pgb.f0010093018 pgb.f0010100100
pgb.f0010100106 pgb.f0010100112 pgb.f0010100118
我正在运行 Fedora 15 64 位。
【问题讨论】:
-
请注意,
for varname in $(ls -1 fileglob 2>/dev/null)只是编写for varname in fileglob的一种稍微错误的方式。 (在你的情况下:for filename in $directory/$newfile。) -
有人曾经告诉我:你永远不应该尝试解析或迭代 ls:mywiki.wooledge.org/ParsingLs 的输出
-
我试过不这样做,但是 find 没有与 pgb.f0010{0930,1001}{00,06,12,18} 之类的东西兼容的正则表达式参数ls.
-
还检查了:fileglob 中的 varname 实际上并没有得到与模式匹配的文件。
-
请列出一个正在匹配的文件名的实际示例,以阐明所询问的内容。