假設我有一個/home包含這些子檔案夾的檔案夾:
/home/alex
/home/luigi
/home/marta
我可以列出并計算檔案夾中的所有子檔案夾,如下所示:
ls 2>/dev/null -Ubad1 -- /home/* | wc -l
3
2但是如果檔案夾(或basename)是===luigi ,我需要找到位置(在這個例子中)
這在bash中可能嗎?
uj5u.com熱心網友回復:
在 William Pursell 發表評論后,這可以完成作業:
ls 2>/dev/null -Ubad1 -- /home/* | awk '/luigi$/{print NR}'
2
請注意$最后的 ,這將避免像joeand一樣的雙打joey。
謝謝。
uj5u.com熱心網友回復:
您可以在通配符擴展上使用 bash shell 回圈,隨時保持索引,并在基本目錄名稱匹配時報告索引:
index=1
for dir in /home/*
do
if [[ "$dir" =~ /luigi$ ]]
then
echo $index
break
fi
((index ))
done
這報告了“luigi”目錄的位置(在 的擴展中/home/*)——用目錄分隔符/和行尾錨定$。
uj5u.com熱心網友回復:
$ find /home/ -mindepth 1 -maxdepth 1 -type d | awk -F/ '$NF=="luigi" {print NR}'
2
$ find /home/ -mindepth 1 -maxdepth 1 -type d | awk -F/ '$NF=="alex" {print NR}'
1
uj5u.com熱心網友回復:
更好地使用 find 來獲取子檔案夾和串列以使用索引進行迭代:
subfolders=($(find /home -mindepth 1 -maxdepth 1 -type d))
Find 會得到 realpath,所以如果你需要 relative,你可以使用類似的東西:
luigi_folder=${subfolders[2]##*/}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/478110.html
標籤:重击
