代替使用find
,您可以直接使用bash,前提是您的搜索條件足夠簡單。例如,
for file in *; do
processFiles "$file"
done
將與參數上的所有文件和當前目錄的目錄執行功能processFiles
(除了隱藏的)每個文件和目錄的名稱。如果你需要遞歸其應用到所有文件和目錄和子目錄(除隱藏的),使用globstar外殼選項:
#!/bin/bash
shopt -s globstar
shopt -s nullglob
updates=0
processFiles() {
((++updates))
}
for file in **; do
processFiles "$file"
done
echo "$updates"
如果你只想文件,並沒有目錄,在插入這個for循環:
[[ -f "$file" ]] || continue
將繼續循環,如果file
不是一個文件(即,如果是別的東西,就像一個目錄)。
要通過擴大可變path
獲取目錄僅匹配文件,寫你的for循環這樣的:
for file in "$path"/*; do
(或"$path"/**
如果你使用globstar,想遞歸)。
如果您需要更復雜的搜索條件,則始終可以使用extglob
選項。如果您還需要包含隱藏文件,請使用dotglob
選項。
可以找到有關的參考手冊bash的更多信息,特別是以下部分:
最後一點:如果你真的不喜歡這個100%bash解決方案,並且你還想做點什麼在OP中保留腳本,然後不使用bash變量,而是使用(臨時)文件來存儲需要從一個進程傳遞到另一個進程的值。這是一種便宜的IPC方法,運行良好,但安全實施起來更加困難。
變量'updates'在子進程中被修改。父進程永遠不會看到它的修改。現在告訴我們你想要達到的目標,也許還有另一種解決方案比你想要的效率更高。 –
目標是在腳本完成後打印一些「統計信息」。 processFiles可以保持原樣,插入新文件或更新現有文件。所有文件處理完畢後,我想知道每個操作發生的次數。這個統計信息是在查找完成它的職責後打印的,因此在processFiles函數中不可能這樣做。 – sge