2010-04-20 64 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 {} \; 

如果你想將其限制到當前目錄下,你可以這樣做:

​​

有許多與查找選項。

相關問題