V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
google456
V2EX  ›  问与答

如何将一个文件夹下的10万个txt文件 分成每500个txt一个文件夹的形式?

  •  
  •   google456 · 2012-07-08 17:06:37 +08:00 · 4096 次点击
    这是一个创建于 4552 天前的主题,其中的信息可能已经有所发展或是发生改变。
    如何将一个文件夹BBB下的10万个txt文件 分成每500个txt一个文件夹(AAA*)的形式?

    最终BBB文件夹下只含有AAA1 AAA2 AAA3... 文件夹,而AAA*内包含500TXT文件。

    求推荐一个软件或者脚本 多谢。
    19 条回复    1970-01-01 08:00:00 +08:00
    cloudzhou
        1
    cloudzhou  
       2012-07-08 17:43:50 +08:00
    #!/bin/bash
    index=0
    while true
    do
    let index=$index+1
    files=`find *.txt -type f |head -n 500|perl -pe 's/\n/ /'`
    if [ "$files" == "" ]; then
    break;
    fi
    if [ ! -e "AAA$index" ]; then
    mkdir "AAA$index"
    fi
    mv $files "AAA$index"
    done
    013231
        2
    013231  
       2012-07-08 17:48:19 +08:00   ❤️ 1
    cloudzhou
        3
    cloudzhou  
       2012-07-08 17:48:32 +08:00   ❤️ 2
    格式有点问题,请看这里
    > curl http://www.gitshell.com/t.sh
    kojp
        4
    kojp  
       2012-07-08 17:48:46 +08:00
    @cloudzhou 出手好快....
    cloudzhou
        5
    cloudzhou  
       2012-07-08 17:51:05 +08:00   ❤️ 1
    @013231 `ls *.txt` 的方式很可能超过个数的(10万!),或者需要xargs一下,并且是一个个文件的move,不能一次mv多个文件
    013231
        6
    013231  
       2012-07-08 18:03:15 +08:00
    @cloudzhou 謝謝, 以前不知道ls可能會有文件數量限制. 我改成find了.
    google456
        7
    google456  
    OP
       2012-07-08 19:53:27 +08:00
    @cloudzhou 有window能用的吗?
    google456
        8
    google456  
    OP
       2012-07-08 19:53:54 +08:00
    @013231 有window能用的吗?
    cloudzhou
        9
    cloudzhou  
       2012-07-08 20:05:39 +08:00
    @google456 支持什么脚本语言,python or perl
    013231
        10
    013231  
       2012-07-08 20:34:30 +08:00
    google456
        11
    google456  
    OP
       2012-07-08 21:12:26 +08:00
    @cloudzhou 用cygwin运行了 sh ./t.sh 出现如下错误

    Administrator@MS /cygdrive/c/1
    $ sh ./t.sh
    ./t.sh: line 6: perl: command not found
    head: 写入错误: Broken pipe
    google456
        12
    google456  
    OP
       2012-07-08 21:13:53 +08:00
    @013231 把你代码保存为qqq.sh 用cygwin运行了 sh ./qqq.sh 出现如下错误

    Administrator@MS /cygdrive/c/1
    $ sh ./qqq.sh
    ./qqq.sh: line 4: syntax error near unexpected token `$'do\r''
    '/qqq.sh: line 4: `do
    cloudzhou
        13
    cloudzhou  
       2012-07-08 21:27:50 +08:00
    @google456 bash ./t.sh
    cloudzhou
        14
    cloudzhou  
       2012-07-08 21:28:55 +08:00
    此外你很可能没有perl环境,把 |perl -pe 's/\n/ /' 这句话去掉看看
    013231
        15
    013231  
       2012-07-08 21:29:14 +08:00
    @google456 如果運行cloudzhou的腳本需要安裝perl.
    如果運行我的腳本, 請直接把'view row'鏈接(在代碼框右下角)保存下來運行, 我懷疑你複製粘貼時改變了某些字符.
    再給你一個Python的版本(需要安裝Python):
    http://gist.github.com/3070895
    同樣請保存原始文件.
    google456
        16
    google456  
    OP
       2012-07-08 21:45:59 +08:00
    @013231 感谢 你的第一个脚本 运行成功了。

    但是貌似对于 文件名含有空格的 文件不行。 文件名会被拆分, 有什么办法么?
    013231
        17
    013231  
       2012-07-08 22:03:57 +08:00   ❤️ 1
    @google456 我修改了那個腳本(加了一句"IFS='\n'"), 你再試試.
    joeyker
        18
    joeyker  
       2012-07-08 22:37:51 +08:00
    歪个楼。
    想起消极姐的一个段子:老板找我谈话说:以后 dev 再问「你有没有想过你这个系统如果有十万张图怎么 办?」你不要回答「哪个二逼要一屏看十万张图」,他想听的其实是「你认为什 么样的架构可以处理?」以及「你好厉害哦!」
    google456
        19
    google456  
    OP
       2012-07-09 10:33:21 +08:00
    @013231 完全解决 真不知道如何感谢, 帅呆了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3497 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 04:42 · PVG 12:42 · LAX 20:42 · JFK 23:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.