我想寫一個bash腳本,使它能夠計算一個目錄中存在的檔案數量。此外,它還需要接受一個命令列引數,即目錄路徑。我還希望它能列印出{目錄}中有{檔案數量}的檔案。
例如
my_project有3個檔案
我試過ls /$@/ | wc -l,似乎不能正確作業
uj5u.com熱心網友回復:
你可以使用
來計算僅僅指定目錄中的檔案。ls -1F $dir_path | grep -v / | wc -l
where:
ls -1F $dir_path列出$dir_path內的檔案和檔案夾。--
。-1每行列出一個檔案--
-F附加指示器到條目(*/=>@|之一)--
$dir_path持有傳遞給你的腳本的引數grep -v /過濾出目錄(如果有的話)wc -l計算代表檔案的剩余行數
如果你想包括隱藏的檔案--在ls中添加-A標志
最終的腳本(基本)看起來是這樣的。
#!/bin/bash
# Set dir_path to current directory to support execution without arguments.
dir_path="。"
if [ $# -eq 1 ]; then.
dir_path="$1"/span>
fi
num_of_files=$(ls -1F $dir_path | grep -v / | wc -l)
echo "目錄${dir_path}有${num_of_files}檔案。
uj5u.com熱心網友回復:
使用bash,你可以生成一個字串,其長度正好是一個目錄中的條目數。
#!/usr/bin/env bash
count_entries(){
# 計算當前目錄下的條目。
local -i dotglob=0 nullglob=0
local -- all='' dirs=''
# 保存當前設定
shopt -q dotglob || dotglob=1
shopt -q nullglob || nullglob=1
# 需要兩個globbing來計算目錄中的條目。
shopt -s dotglob nullglob
# 將目錄中的條目變成一個字串。
printf -v all -- '%.1s'/span> *
# 將目錄條目變成一個字串。
printf -v dirs -- '%.1s' */
# 恢復設定 */span
["$dotglob" -eq 1] && shopt -u dotglob
["$nullglob" -eq 1 ] && shopt -u nullglob
# 條目數是字串的長度。
local -i a="${#all}"/span>
local -i d="${#dirs}"/span>
local -i f=$((a - d))
# 列印以空格為界的數值
printf '%d%d%d
' "$a" "$d" "$f"
}
read -r entries directories files < <(count_entries)
printf 'In %s there are:
%d條目
%d 目錄
%d檔案
' "$PWD"
"$entries" "$directories 變數">$directories" "$files"
uj5u.com熱心網友回復:
#!/bin/bash
set -e
shopt -s extglob
(($# ==1))
for p in "${1}/"? (.@([^. ]|. ?))*; do
[[ -f "$p" ]] && (( counter)) || :
done done
printf '%s
' "${path} has $((counter)) files"
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/324024.html
標籤:
上一篇:從一個df創建多個df
下一篇:替換XML-訊息中的前綴
