【问题标题】:Split all of the files in a directory by 1000 lines and process them through a perl script将目录中的所有文件拆分为 1000 行,并通过 perl 脚本处理它们
【发布时间】:2015-10-15 13:33:03
【问题描述】:

我使用这一行尝试将目录中的所有文件拆分为较小的文件并将它们放入新目录中。

cd /path/to/files/ && find . -maxdepth 1 -type f -exec split -l 1000 '{}' "path/to/files/1/prefix {}" \;

结果是“找不到文件”,那么我该如何进行这项工作,以便将目录中的所有文件拆分为更小的 1000 行文件并将它们放置在新目录中?

稍后...

我尝试了很多变体,但都不起作用。我阅读了另一篇拆分无法对多个文件进行操作的文章。我是否需要制作一个 shell 脚本,或者我该怎么做?

我有一个使用循环的好主意。所以,我研究了“for”循环,结果如下:

for f in *.txt.*; do echo "Professing $f file..."; split -l 1000 $f 1split.ALLEMAILS.txt. ; done

.txt. 位于工作目录的所有文件中。 'echo' 命令是可选的。对于“split”命令,我没有命名一个文件,而是用“for”行定义的 $f 替换了它。

我唯一想做的就是将所有这些移动到命令中的另一个目录。

现在,我被困在移动所有匹配文件的 find 命令上。这是我到目前为止所做的但不起作用:

find . -type f -name '1split.*' -exec mv {} new/directory/{} \;

我收到错误“不是目录”;或者我试过了:

find . -type f -name '1split.*' -exec mv * . 1/ \;

我得到'没有这样的文件或目录'

有什么想法吗?

我发现此命令将所有文件移动到新目录,而不是专门满足条件“1split.*”的文件

【问题讨论】:

    标签: perl for-loop split find


    【解决方案1】:

    所以,我的问题的答案是:

    for f in *.txt.*; do echo "Professing $f file..."; split -l 1000 $f 1split.ALLEMAILS.txt. ; done
    

    mv *searchcriteria /new/directory/path/
    

    毕竟我不需要 find 命令。因此,将这两者结合起来就可以了:

    for f in *.txt.*; do echo "Professing $f file..."; split -l 1000 $f 1split.ALLEMAILS.txt. ; done
    mv *searchcriteria /new/directory/path/ | echo "done."
    

    ---稍后...

    我发现这基本上需要 1 个文件并对其进行处理。

    我用一个小的 shell 脚本解决了这个问题:

    #!/bin/sh
    
    for f in /file/path/*searchcriteria ; ## this was 'split.*' in my case
    
      do echo "Processing $f in /file/path/..." ;
    
      perl script.pl --script=options $f > output.file ;
    
      done ;
    
    echo "done."
    

    【讨论】:

      猜你喜欢
      • 2016-03-27
      • 1970-01-01
      • 2015-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多