在 csv 文件上写入时文件名被分割

在 csv 文件上写入时文件名被分割

我在终端文件夹中有一个目录。我正在使用 MobaXterm。该目录中有大量文件。文件名很长并且包含一些非法字符。示例文件名是“秘书长 2015 年后发展议程高级别小组的三位联合主席(印度尼西亚、利比里亚、英国) - Media Stakeout-1861343067001.m4a”。我使用以下命令行将文件名写入 csv 文件,到目前为止它一直有效。

dir$ find . -type f  > names.csv

但这一次,文件名不再是一列,而是分为几列。

在此输入图像描述

我只想在 A 列中输入整个名称。我想写入原始文件名,包括逗号。相同的命令能够为我之前的数据集编写带有逗号的文件名,唯一的区别是这些文件名比这个短。

如何修复它?

答案1

在 Linux 上,GNU find 有一个-printf选项可以打印给定格式的文件名;要导入到 CSV,您可以用双引号将文件名括起来,例如:

find . -type f -printf '"%p"\n'

答案2

CSV 表示逗号分隔值。当电子表格读取文件时,它将逗号解释为字段分隔符。将逗号替换为其他分隔符,例如下划线,t,因此

$ tr ',' '-_' < input.csv | tr -d '"' 

当你导入它们时,字段一不会被分割。

答案3

CSV 有不同的风格,但使用 sed 的 RFC 4180 兼容解决方案:

find . -type f | sed 's/"/""/g;s/\(.\+\)/"\1"/'

"这将替换with的实例""并用双引号封装非空行。

答案4

文件名长度在这里不起作用,但导入引擎默认分隔符起作用。选择文件名中从未使用过的字符并将其用作 CVS 分隔符。让我们假设这个选择是§(部分符号)你的find命令是:

find . -type f -printf '§%p§\n' > names.csv

或者如果您想获取没有起始点的文件名:

find . -type f -printf '§%P§\n' > names.csv

现在,在导入 csv 时指定 § 作为分隔符 在此输入图像描述

相关内容