我想在一個文件目錄上運行一個程序。我知道如何與一個文件做到這一點,利用如何在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