我想在文件目录上运行程序。我知道如何使用
在一个文件中执行此操作 cat myFile.xml | myProgram.py
。
如何在文件夹上运行myProgram.py,比如myFolder?
谢谢!
答案 0 :(得分:3)
假设您的程序可以接受文件名作为其第一个命令行参数,一种方法是使用find
查找文件夹中的所有文件,然后使用xargs
为每个文件运行程序他们:
find myFolder | xargs -n 1 myProgram.py
-n 1
表示“每个文件运行一次程序”。如果您的程序很乐意在其命令行上接收多个文件名,则可以省略-n 1
,xargs
将在命令行中使用多个文件运行程序的次数更少。
(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!