将目录中的所有文件拆分1000行,然后通过perl脚本处理它们

时间:2015-10-15 13:33:04

标签: perl for-loop split find

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

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。*'的文件。

1 个答案:

答案 0 :(得分:0)

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

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

mv *searchcriteria /new/directory/path/

毕竟我不需要这个命令。因此,将这两者结合起来就可以做到这一点:

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."