我想制作一個 bash 腳本來計算特定檔案夾中有多少檔案。
例子:
#!/usr/bin/env bash
sum=0
find /home/user/Downloads | wc -l
find /home/user/Documents | wc -l
find /home/user/videos | wc -l
echo "files are $sum "
下載檔案夾有 5 個檔案,檔案有 10 個檔案,視頻有 10 個檔案。
我想添加上述目錄中的所有檔案并列印檔案數。echo "檔案是 $sum "
請我想使用“僅”查找命令,因為我的腳本洗掉了一些檔案。我的目標是我洗掉了多少檔案。
uj5u.com熱心網友回復:
任何通過管道傳輸的內容wc -l都不會計算您擁有多少檔案,而是計算存在多少換行符,因此如果您的任何檔案名包含換行符,它將失敗(這是一種非常真實的可能性,尤其是考慮到您所在的特定目錄)搜索)。您可以使用 GNU 工具來執行此操作:
find \
/home/user/Downloads \
/home/user/Documents \
/home/user/videos \
-print0 |
awk -v RS='\0' 'END{print NR}'
uj5u.com熱心網友回復:
我不確定這一點,但你可以試試這個代碼。
#!/usr/bin/env bash
sum=0
downloads=$(find /home/user/Downloads | wc -l)
((sum = downloads))
documents=$(find /home/user/Documents | wc -l)
((sum = documents))
videos=$(find /home/user/videos | wc -l)
((sum = videos))
echo "files are $sum "
uj5u.com熱心網友回復:
您可以保存單個結果并根據FS-GSW 的回答對它們求和。
這就是我在 Java 或 C 中會做的事情,但是 shell 腳本有自己的模式。每當您發現自己有很多變數或顯式回圈時,請退后一步。這種命令式風格在 shell 腳本中并不是非常慣用的。
- 您可以將多個檔案名傳遞給同一個命令嗎?
- 那個回圈可以變成管道嗎?
在這種情況下,我會將所有三個目錄傳遞給一個find命令。然后你只需要wc -l在組合串列上呼叫一次:
find /home/user/Downloads /home/user/Documents /home/user/videos | wc -l
或者使用波浪號和大括號擴展:
find ~user/{Downloads,Documents,videos} | wc -l
如果檔案串列變長,您可以將其存盤在陣列中:
files=(
/home/user/Downloads
/home/user/Documents
/home/user/videos
)
find "${files[@]}" | wc -l
uj5u.com熱心網友回復:
只需使用..
find /home/user/ -type f | wc -l
.. 遞回計算用戶目錄中的檔案。
隨著tree你也可以找到/數(或你想要做的任何其他)隱藏檔案。
例如tree -a /home/user/- 輸出將是:XXX 目錄,XXX 檔案- 但是這不適用于您的問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/392371.html
標籤:猛击
