我想在一个文件目录上运行一个程序。我知道如何与一个文件做到这一点,利用如何在Unix中使用cat来输入整个输入文件目录?
cat myFile.xml | myProgram.py
。
如何运行myProgram.py一个文件夹上,说MyFolder文件?
谢谢!
我想在一个文件目录上运行一个程序。我知道如何与一个文件做到这一点,利用如何在Unix中使用cat来输入整个输入文件目录?
cat myFile.xml | myProgram.py
。
如何运行myProgram.py一个文件夹上,说MyFolder文件?
谢谢!
假设你的程序能接受一个文件名作为其第一个命令行参数,一个方法是使用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
只返回常规文件)
cat myFolder/* | myProgram.py
这是否为myFolder中的每个文件运行一次myProgram? – 2010-04-20 22:07:52
@Sanjay:不,这会将所有文件连接成一个myProgram.py将在stdin上看到的流。如果OP希望为每个文件调用一次myProgram.py,那么他需要在他的问题中声明这一点,并且在这种情况下find/xargs的其中一个答案会更适合。 – 2010-04-20 22:12:10
如何:。
for x in myFolder/*
do
cat $x | myProgram.py
done
或者cat *.xml | myProgram.py
将产生每个.xml文件到标准输入输出,然后用管道输送到你的程序。这将所有文件合并为一个流。
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!
如果你只是想在一堆文件的执行你的数据的程序,最简单的/最复杂的方式是在查找中使用的-exec。
假设你想在当前目录下的所有TXT文件(和子目录)进行数据。这是所有你需要:
find . -name "*.txt" -exec data {} \;
如果你想将其限制到当前目录下,你可以这样做:
有许多与查找选项。
属于superuser.com – 2010-04-20 21:49:02