1

这是我的问题:我必须解决用户可配置的各种文件名/位置(数据目录可能有子目录)。如果我可以在循环之前完全解析文件名,则以下脚本有效:

[提示] 更多 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 位。

4

2 回答 2

3
新文件="*"
查找 -L ${FILE_PATH}/data -name "${newfile}" \
| 读取文件名时
  做
    如果 [[ -r ${文件名} ]]; 然后
      echo "找到 ${filename}"
    菲
  完毕

-或者-

新文件="*"
find -L ${FILE_PATH}/data -name "${newfile}" -readable -exec echo "Found {}" \;

-或使用正则表达式-

新文件='.*/pgb.f0010(0930|1001)(00|06|12|18)'
文件路径=。
找到 -L ${FILE_PATH}/。-regextype posix 扩展\
  -regex "${newfile}" - 可读 -exec echo "Found {}" \;
于 2012-10-24T20:32:44.767 回答
0

根本问题是损坏的脚本中存在对 shell 扩展的依赖。使用评估:

#!/usr/bin/env bash
文件路径=“。”
新文件=pgb.f0010{0930,1001}{00,06,12,18}

对于`find -L ${FILE_PATH}/data -type d`中的目录;做
    `eval ls -1 ${directory}/${newfile} 2>/dev/null` 中的文件名;做
        如果 [[ -r ${文件名} ]]; 然后
            echo "找到 ${filename}"
        菲
    完毕
完毕
于 2012-10-25T16:17:08.673 回答