2010-04-20 61 views

回答

3

我喜欢

ls | xargs cat 

其功能性语言的感觉。因人而异。

+0

以前我从来没有听说过这样的事情吗? +1 – Beta 2010-04-21 03:51:50

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只返回常规文件)

+0

要小心查找。首先,你需要'find myFolder /'中的斜线。其次,请注意,find会返回文件夹本身及其所有内容,除非使用-maxdepth,否则它也会递归地执行此操作。 Find很复杂;你应该先阅读它的手册页。 – Personman 2010-04-20 21:53:49

+0

看起来像基于OP的矫枉过正。 – dawg 2010-04-20 22:04:36

0

cat myFolder/* | myProgram.py

+0

这是否为myFolder中的每个文件运行一次myProgram? – 2010-04-20 22:07:52

+0

@Sanjay:不,这会将所有文件连接成一个myProgram.py将在stdin上看到的流。如果OP希望为每个文件调用一次myProgram.py,那么他需要在他的问题中声明这一点,并且在这种情况下find/xargs的其中一个答案会更适合。 – 2010-04-20 22:12:10

1

如何:。

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

或者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!

1

如果你只是想在一堆文件的执行你的数据的程序,最简单的/最复杂的方式是在查找中使用的-exec。

假设你想在当前目录下的所有TXT文件(和子目录)进行数据。这是所有你需要:

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

如果你想将其限制到当前目录下,你可以这样做:

​​

有许多与查找选项。

相关问题