我正在嘗試執行一個回圈遍歷檔案夾及其子檔案夾和列印檔案的 bash 腳本。這部分正在作業,但我嘗試將這部分置于 if 條件下,但似乎我無法..
我想要的是,每發現 10 個檔案就休眠 10 秒,然后從剩下的地方重新開始(繼續)。
這就是我所做的
#!/bin/bash
declare -i x=0
if (( $x < 10 )); then
find /myfolder -type f -maxdepth 5 | while read file; do
echo $file;
((x ))
echo $x;
done
else
echo "found 10";
sleep 10;
$x=0;
fi
uj5u.com熱心網友回復:
我會這樣做:
while IFS= read -rd '' file; do
printf '%s\n' "$file"
(( i % 10)) || sleep 10
done < <(find /myfolder -maxdepth 5 -type f -print0)
這使用行程替換、-print0、IFS= read -rd ''和printf而不是echo允許檔案名中的所有合法字符。
重要的一行是
(( i % 10)) || sleep 10
這增加了1到i,然后檢查是否i是現在的10的倍數。由于其余為非零時i是不為10,多(( i % 10))評估為真(0退出狀態),和沒有任何反應。當i 是10 的倍數時,(( i % 10))變為((0)),其退出狀態非零,并被sleep 10執行。
為什么你的方法不起作用:
一旦你檢查了 ifx小于 10,你就find | while ...; do ... done完全運行命令——在x它完成之前永遠不會檢查 的值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/333600.html
標籤:猛击
上一篇:如何保存結果但不在終端中顯示輸出
