V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
mateor95
V2EX  ›  程序员

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

  •  
  •   mateor95 · 2022-04-20 23:06:39 +08:00 · 2442 次点击
    这是一个创建于 947 天前的主题,其中的信息可能已经有所发展或是发生改变。
    背景:使用脚本自动处理了一大批文件,大约 30000 个,文件名也是从某种关联途径生成的。

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

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

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

    相信重命名的命令对你来说也不是什么难事
    mateor95
        13
    mateor95  
    OP
       2022-04-21 11:13:28 +08:00 via iPhone
    @darkengine 问题在于,“找不到”这些带 LF 的文件
    mateor95
        14
    mateor95  
    OP
       2022-04-21 11:14:04 +08:00 via iPhone
    @jones2000 #11
    是的,目前已经改好了这部分机制,但是老的文件让人头疼
    dier
        15
    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
        16
    mateor95  
    OP
       2022-04-21 11:48:37 +08:00
    @skys215 #12
    谢谢老哥,找出来了大部分文件,剩下的居然还是找不出来,真是离奇...
    mateor95
        17
    mateor95  
    OP
       2022-04-21 11:49:16 +08:00
    @dier #15
    我找了个文件测试了一下,在我这里带 LF 的,head 居然可以打开...
    mateor95
        18
    mateor95  
    OP
       2022-04-21 12:15:23 +08:00
    @skys215 感谢老哥,问题解决了,处理不到的是第二个问题了,谢谢
    dier
        19
    dier  
       2022-04-21 13:40:29 +08:00
    @mateor95 #17 因为我没有你说的这种文件,所以没办法验证。不过你们的处理方式打不开的话可以把我脚本中的 head 命令替换成你们的处理方式试试。
    skys215
        20
    skys215  
       2022-04-22 12:00:34 +08:00
    @mateor95 我就随手谷歌了一下,不足挂齿
    mateor95
        21
    mateor95  
    OP
       2022-04-23 12:37:18 +08:00
    @skys215 #20
    咋搜的,为啥我搜到的跟你搜到的不一样..
    skys215
        22
    skys215  
       2022-04-24 10:23:54 +08:00
    通过 linux find filename with CRLF 找到了 ctrl+v ctrl+m 可以输入 CR
    那只要再搜索如何输入 LF 就好了
    xiubin
        23
    xiubin  
       2022-11-12 18:23:53 +08:00
    抱歉 同学,因找不到联系方式所以在老帖子里联系你,我最近开始玩 nas ,接触到了 pt 站,在 v2 上有看到过你曾经分享过馒头站的邀请码,冒昧的问下可以送一个邀请码吗,懂规矩,有上传和下载的。aW9zZ2dAb3V0bG9vay5jb20=

    谢谢~
    mateor95
        24
    mateor95  
    OP
       2022-11-15 22:00:26 +08:00
    @xiubin #23 outlook/hotmail 发不了,gmail 或者 qq 吧
    xiubin
        25
    xiubin  
       2022-11-15 23:55:25 +08:00
    @mateor95 #24 感谢~
    eGl1YmluLndhbmdAcXEuY29t
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2644 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 10:20 · PVG 18:20 · LAX 02:20 · JFK 05:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.