【问题标题】:Multiple files generated by script, only last one readable脚本生成多个文件,只有最后一个可读
【发布时间】:2016-11-21 12:07:17
【问题描述】:

我在通过 linux shell 脚本生成文本文件时遇到了一个相当奇怪的问题。情况是这样的:

在我的 Synology Disk Station 上,我正在执行一个 sh 脚本。它使用只读 SQL 用户访问本地 mySQL 数据库。有多个调用(每次调用一行),每个调用都将接收到的输出写入不同位置的 .csv 文件。

.sh 脚本如下所示:

/some/path/create_lists.sh

mysql --arguments < /path/to/script1.sql > /path/to/outfile1.csv
mysql --arguments < /path/to/script2.sql > /path/to/outfile2.csv
mysql --arguments < /path/to/script3.sql > /path/to/outfile3.csv
mysql --arguments < /path/to/script4.sql > /path/to/outfile4.csv

我想使用我的 Windows PC 访问这些文件。

原则上,这已经可以正常工作了,但不知何故,MS Excel 只能直接读取最后创建的 .csv 文件。在上面的示例中,outfile4.csv 将是唯一可读的文件。交换第 3 行和第 4 行时,outfile3.csv 将是可读的。对于 outfile4.csv,将创建一个名称完全相同的新文件,MS Excel 无法打开该文件。不过记事本++可以打开它。

在 Windows 资源管理器中看起来像这样:

\\myNAS\path\to

outfile4.csv    (working)
outfile4.csv    (not working)

怎么会有两个同名文件?一个工作而另一个不工作?

【问题讨论】:

  • 并且勇敢地自我回答了跨 windows-linux 脚本的 #1 问题和格式良好的 Q。现在移动该答案,您会在 48 小时后接受自己的答案并获得“有价值”声望点;-)。
  • 已更改,谢谢!

标签: linux windows bash filenames


【解决方案1】:

在写这个问题的时候,我自己解决了,但还是想贴出来给别人看。

解决方案如下:我使用 Notepad++ 在我的 Windows PC 上编写了脚本。我将它们保存在 NAS 上的专用脚本文件夹中。通过 NAS 运行它们看似有效,但有一个小细节导致了问题。 回车。

虽然 Windows 使用回车 (\r) 换行 (\n) 导致 \r\n 对于新行,基于 unix 的系统仅使用换行符 (\n)

通过在windows机器上写脚本,我基本上是这样写的:

mysql --arguments < /path/to/script1.sql > /path/to/outfile1.csv\r\n
mysql --arguments < /path/to/script2.sql > /path/to/outfile2.csv\r\n
mysql --arguments < /path/to/script3.sql > /path/to/outfile3.csv\r\n
mysql --arguments < /path/to/script4.sql > /path/to/outfile4.csv

在linux上读取文件导致:

mysql --arguments < /path/to/script1.sql > /path/to/outfile1.csv?\n
mysql --arguments < /path/to/script2.sql > /path/to/outfile2.csv?\n
mysql --arguments < /path/to/script3.sql > /path/to/outfile3.csv?\n
mysql --arguments < /path/to/script4.sql > /path/to/outfile4.csv

我通过 SSH 列出包含文件夹的内容发现了这一点:

ls -alh /path/to

... outfile4.csv
... outfile4.csv?

我们有了它!这就是为什么最后一个文件有效而其他文件无效的原因。这也是为什么可以有两个具有“相同”名称的文件的原因。 Windows 根本不显示导致很多混乱的问号。

因此,如果有人遇到此问题,他可能会偶然发现此线程并节省一些时间。我想这对大多数人来说是常识,但我仍然是 Linux 的初学者,所以我必须努力学习 :)

【讨论】:

    猜你喜欢
    • 2014-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-12
    • 2011-04-07
    • 2019-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多