如何在Unix中使用cat输入整个输入文件目录?

时间:2010-04-20 21:44:55

标签: unix

我想在文件目录上运行程序。我知道如何使用

在一个文件中执行此操作

cat myFile.xml | myProgram.py

如何在文件夹上运行myProgram.py,比如myFolder?

谢谢!

6 个答案:

答案 0 :(得分:3)

假设您的程序可以接受文件名作为其第一个命令行参数,一种方法是使用find查找文件夹中的所有文件,然后使用xargs为每个文件运行程序他们:

find myFolder | xargs -n 1 myProgram.py

-n 1表示“每个文件运行一次程序”。如果您的程序很乐意在其命令行上接收多个文件名,则可以省略-n 1xargs将在命令行中使用多个文件运行程序的次数更少。

find将进行递归搜索,因此您将获得 myFolder下的所有文件。您可以使用find myFolder -maxdepth 1来阻止这种情况。)

(感谢@Personman指出这将运行文件夹本身以及文件的程序。您可以使用find myFolder -type f告诉find仅返回常规文件。)< / p>

答案 1 :(得分:3)

我喜欢

ls | xargs cat

它的功能语言感觉。 YMMV。

答案 2 :(得分:1)

怎么样:

for x in myFolder/*
do
cat $x | myProgram.py
done

答案 3 :(得分:1)

如果您只是尝试在一堆文件上执行数据程序,最简单/最简单的方法是在find中使用-exec。

假设您想要在当前目录(和子目录)中的所有txt文件上执行数据。这就是你所需要的:

find . -name "*.txt" -exec data {} \;

如果要将其限制在当前目录中,可以执行以下操作:

find . -maxdepth 1 -name "*.txt" -exec data {} \;

查找有很多选项。

答案 4 :(得分:0)

cat myFolder/* | myProgram.py

答案 5 :(得分:0)

cat *.xml | myProgram.py,它会将每个.xml文件的输出生成到stdin,然后通过管道传送到您的程序。这将所有文件合并为一个流。

myProgram.py *.xml会将每个文件名扩展为您的程序的输入,如下所示:myProgram.py file1.xml file2.xml file3.xml ... filen.xml每个文件保持独立,脚本可以相互告知。

Python / Perl / sh脚本,基本情况,通常处理与myProgram.py file1.xml; myProgram.py file2.xml; myProgram.py filen.xml相同的;含义新命令。

玩它并欢迎使用Unix!