google456
V2EX  ›  问与答

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

  •  
  •   google456 · Jul 8, 2012 · 4968 views
    This topic created in 5235 days ago, the information mentioned may be changed or developed.
    如何将一个文件夹BBB下的10万个txt文件 分成每500个txt一个文件夹(AAA*)的形式?

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

    求推荐一个软件或者脚本 多谢。
    19 replies  •  1970-01-01 08:00:00 +08:00
    cloudzhou
    cloudzhou
    Jul 8, 2012
    1
    #!/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
    cloudzhou
    cloudzhou
    Jul 8, 2012❤️2
    3
    格式有点问题,请看这里
    > curl http://www.gitshell.com/t.sh
    kojp
    kojp
    Jul 8, 2012
    4
    @cloudzhou 出手好快....
    cloudzhou
    cloudzhou
    Jul 8, 2012❤️1
    5
    @013231 `ls *.txt` 的方式很可能超过个数的(10万!),或者需要xargs一下,并且是一个个文件的move,不能一次mv多个文件
    013231
    013231
    Jul 8, 2012
    6
    @cloudzhou 謝謝, 以前不知道ls可能會有文件數量限制. 我改成find了.
    google456
    google456
    OP
    Jul 8, 2012
    7
    @cloudzhou 有window能用的吗?
    google456
    google456
    OP
    Jul 8, 2012
    8
    @013231 有window能用的吗?
    cloudzhou
    cloudzhou
    Jul 8, 2012
    9
    @google456 支持什么脚本语言,python or perl
    google456
    google456
    OP
    Jul 8, 2012
    11
    @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
    google456
    OP
    Jul 8, 2012
    12
    @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
    cloudzhou
    Jul 8, 2012
    13
    @google456 bash ./t.sh
    cloudzhou
    cloudzhou
    Jul 8, 2012
    14
    此外你很可能没有perl环境,把 |perl -pe 's/\n/ /' 这句话去掉看看
    013231
    013231
    Jul 8, 2012
    15
    @google456 如果運行cloudzhou的腳本需要安裝perl.
    如果運行我的腳本, 請直接把'view row'鏈接(在代碼框右下角)保存下來運行, 我懷疑你複製粘貼時改變了某些字符.
    再給你一個Python的版本(需要安裝Python):
    http://gist.github.com/3070895
    同樣請保存原始文件.
    google456
    google456
    OP
    Jul 8, 2012
    16
    @013231 感谢 你的第一个脚本 运行成功了。

    但是貌似对于 文件名含有空格的 文件不行。 文件名会被拆分, 有什么办法么?
    013231
    013231
    Jul 8, 2012❤️1
    17
    @google456 我修改了那個腳本(加了一句"IFS='\n'"), 你再試試.
    joeyker
    joeyker
    Jul 8, 2012
    18
    歪个楼。
    想起消极姐的一个段子:老板找我谈话说:以后 dev 再问「你有没有想过你这个系统如果有十万张图怎么 办?」你不要回答「哪个二逼要一屏看十万张图」,他想听的其实是「你认为什 么样的架构可以处理?」以及「你好厉害哦!」
    google456
    google456
    OP
    Jul 9, 2012
    19
    @013231 完全解决 真不知道如何感谢, 帅呆了。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1092 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 17:02 · PVG 01:02 · LAX 09:02 · JFK 12:02
    ♥ Do have faith in what you're doing.