2016-11-29 30 views
0

我有10000個TXT文件的文件夾,和一個shell腳本,如果在一個文件中使用,適用於以下方式:飼養模式匹配到腳本的標準輸入的所有文件

cat some_file.txt | ./myscript.sh 

然而,我試圖創建一個循環,將腳本傳遞給該文件夾中的每個文件。這是我已經嘗試了這麼多 - 和劑量的工作:

for f in /Users/me/desktop/folder*.txt; do ./myscript.sh 「$f」; done 

任何想法如何添加「貓」命令在我的腳本?

+0

你的報價是微軟SmartQuotes,不是真實的報價。你的代碼是從Word文檔或Outlook電子郵件等複製並粘貼的嗎? –

+1

也就是說''$ f「'與''$ f」'是完全不同的東西。 –

+0

(另一方面,使用'.sh'擴展名 - 尤其是對於bash腳本,它不是* POSIX sh腳本 - 並不理想:它錯誤地暗示你的腳本可以用'sh yourscript.sh',而且意味着如果你用一種完全不同的語言重寫它,你需要保留一個令人誤解的擴展名或修改所有的調用者使用新的名字)。 –

回答

2

如果myscript.sh一個實例將能滿足所有文件的內容:

find /Users/me/desktop/ -maxdepth 1 -type f -name 'folder*.txt' \ 
    -exec cat {} + | ./myscript.sh 

...這將有find調用一個cat實例文件的每批最多操作系統的限制上命令行長度,並將所有這些實例在單個流中輸入的結果合併到一個實例myscript.sh中。


或者,如果你希望你的腳本的每個文件的不同實例:

for f in /Users/me/desktop/folder*.txt; do ./myscript.sh <"$f"; done 
+0

你的發現需要深度= 1或它可以找到子目錄中的文件,這不會是等同的。 –

+0

@ Jean-FrançoisFabre,是的,我已經編輯添加'-maxdepth 1'已經在進行中。 –

+0

只是爲了迂腐:) –