求助一下各位大佬们,这个问题快把我逼疯了

2022-04-20 23:06:39 +08:00
 mateor95
背景:使用脚本自动处理了一大批文件,大约 30000 个,文件名也是从某种关联途径生成的。

问题:部分生成的文件名里面包含 LF (即换行),导致一些后续处理无法进行

求助:怎么样才能批量找到这些 文件名中含有 LF 的文件呀?
2464 次点击
所在节点    程序员
25 条回复
auh
2022-04-20 23:48:50 +08:00
改脚本。找到脚本中判断文件名的地方。兼容一下。具体兼容找看语言和方式。搜索关键词,编程语言加你的问题。

另外,文件名出现问题,内容可能存在同样的问题。如果处理结果也会依赖内容,注意处理结果的准确性。
mateor95
2022-04-21 00:06:03 +08:00
@auh #1
脚本已经修正,但是不知道要怎么去找到这些除了问题的文件。
auh
2022-04-21 00:19:50 +08:00
@mateor95
你改脚本的方式,改变了源文件没有?
如果改变了原文件名,就凉了。找不出来了。
如果原始数据没有动,只是兼容逻辑判断。直接在逻辑判断的时候,打日志出来。
就找到了。
jones2000
2022-04-21 00:44:43 +08:00
将处理文件的脚本独立出来, 每次处理 1 个文件, 外部单独写一个脚本循环读取文件名,单独起进程给这个处理脚本处理,这样就算 1 个文件处理失败了,也不会导致后面的文件不处理。 增加日志, 处理完成的文件名写入到一个日志里面。这样跑完所有的文件,异常的文件通过所有文件列表-处理完成文件列表可以得到, 然后异常的文件单独手动处理吧。
flynaj
2022-04-21 08:26:47 +08:00
"" '' 把文件名包起来。只有操作系统能处理就行。 for /R d:\ /D %i in (*) do fsutil.exe file SetCaseSensitiveInfo "%i" enable
mateor95
2022-04-21 09:47:24 +08:00
@auh #3
现在问题就在于,源文件是每日生成每日处理的,但处理出来的文件是每周才进行一次处理。源文件已经没有了😭
mateor95
2022-04-21 09:48:54 +08:00
@jones2000 #4
看起来不存在直接找到这些文件的办法是吗?只能通过先处理一部分文件,再反向找这些不成功的文件是吗?
mateor95
2022-04-21 09:50:06 +08:00
@flynaj #5
不好意思,手头没有 windows 可以测试。请问下有没有 linux 下的办法?
skys215
2022-04-21 10:34:07 +08:00
文件名中包含 LF ?
darkengine
2022-04-21 10:36:08 +08:00
先批量处理重命名文件,把文件名里的 LF 去掉,再运行原脚本
jones2000
2022-04-21 10:40:04 +08:00
@mateor95 新的问题会一直出现的, 只能是有 1 个机制,可以确保正确的文件名可以运行,异常的文件可以列出来,这样才能快速的改进这个脚本, 否则你解决了这个问题,下次出来新的问题又要重新排查一遍, 多麻烦。
skys215
2022-04-21 10:42:50 +08:00
find ./ -name "*(ctrl+v ctrl+j)*" 就能找到文件名含 lf 的文件。
括号部分是你要按的键,而不是输入的内容。如果是 CR ,那就是 ctrl+v ctrl+m ,会显示为^M

相信重命名的命令对你来说也不是什么难事
mateor95
2022-04-21 11:13:28 +08:00
@darkengine 问题在于,“找不到”这些带 LF 的文件
mateor95
2022-04-21 11:14:04 +08:00
@jones2000 #11
是的,目前已经改好了这部分机制,但是老的文件让人头疼
dier
2022-04-21 11:16:50 +08:00
有个不是办法的办法,你可以试试
在这个目录下,尝试对每个文件使用 head 命令查看一下文件第一行,如果文件名有换行符,理论上是打不开的,然后就把打不开的文件名输出到一个 txt 中。

```shell
cd /path/
for FILENAME in $(ls)
do
head -n 1 ${FILENAME} > /dev/null 2>&1 || echo ${FILENAME} >> /tmp/LF_file_list.txt
done

```
mateor95
2022-04-21 11:48:37 +08:00
@skys215 #12
谢谢老哥,找出来了大部分文件,剩下的居然还是找不出来,真是离奇...
mateor95
2022-04-21 11:49:16 +08:00
@dier #15
我找了个文件测试了一下,在我这里带 LF 的,head 居然可以打开...
mateor95
2022-04-21 12:15:23 +08:00
@skys215 感谢老哥,问题解决了,处理不到的是第二个问题了,谢谢
dier
2022-04-21 13:40:29 +08:00
@mateor95 #17 因为我没有你说的这种文件,所以没办法验证。不过你们的处理方式打不开的话可以把我脚本中的 head 命令替换成你们的处理方式试试。
skys215
2022-04-22 12:00:34 +08:00
@mateor95 我就随手谷歌了一下,不足挂齿

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/848259

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX