【问题标题】:Redirect output No such file or directory重定向输出没有这样的文件或目录
【发布时间】:2017-05-03 11:27:39
【问题描述】:

我正在尝试启动一个脚本来回显(作为测试)不同目录中文件的文件名,但得到“没有这样的文件或目录”错误。看起来它正在将我正在回显的整个目录附加到我试图重定向到的文件名,但我该如何解决这个问题。谢谢。

for filename in /data/logs/2017/jan/201701*
do
echo $filename > /home/bishopm/${filename%.gz}
done

为每个尝试回显的文件获取以下错误:

./data_collector.sh: line 5: /home/bishopm//data/logs/2017/jan/20170131: No such file or directory

【问题讨论】:

标签: bash shell


【解决方案1】:

您实际上需要告诉 sh 您要遍历该目录中的文件列表,因此您调用 ls 命令

for filename in $(ls /data/logs/2017/jan/201701*);
do
file=$(basename $filename)
echo $file > /home/bishopm/${file%.gz}
done

编辑:现在它应该可以工作了,前提是 bishopm 目录存在 Edit2: 用basename 替换rev | cut | rev 链,感谢Sild

【讨论】:

  • sh 扩展了 * 实际上,您不需要 ls 文件
  • 是的,但生成的 $filename 将具有完整路径,而不是 ls 的输出,它只是文件的名称。也不会以这种方式发生正斜杠问题
  • 它仍然进行附加而不是仅重定向文件名。
  • 现在我才知道问题所在。检查编辑是否为您修复了它
  • 请使用basename 而不是rev|cut|rev。更清楚了。
【解决方案2】:

您的路径中有 2 个//home/bishopm//...。试试:

...
echo $filename > "/home/bishopm${filename%.gz}"
...

【讨论】:

    【解决方案3】:

    更优雅的 POSIX 解决方案:

    for filpath in /data/logs/2017/jan/201701*; do
        filename="$(basename "${filepath}")"
        echo "${filename}" > /home/bishopm/${filename%.gz}
    done
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-14
      • 2013-01-14
      • 2021-06-24
      • 1970-01-01
      • 2015-02-20
      • 1970-01-01
      • 2019-12-23
      相关资源
      最近更新 更多