我想弄清楚我將如何搜索多個目錄,使用pushd定義,以便找到列表中的文件夾的磁盤空間,以及是否有任何文件夾是sym鏈接。現在我有一些非常低效的循環,不能在多個目錄中工作(如果只有一個目錄,它可以正常工作,但是一旦我開始用pushd定義多個工作目錄,它就會將其分解)。通過在bash中的多個目錄搜索
UPDATE:在執行時,它
COMPARE=`comm -23 "$HOMEOUT" "$USEROUT" |
comm -23 - <(
for f in "${FILTER[@]}"; do
echo "$f"
done | sort)`
這裏是我的代碼和我的結果:
的$內容對比參考
DIRS=`ls -lah/| grep home | awk '{ print $9 }'`
for i in "$DIRS"; do
pushd /$i/ >/dev/null
done
# Find the disk space of each folder
for x in "$DIRS"; do
du -s /$x/$COMPARE | sort -n | cut -f 2-|xargs -i du -sh {}
done
# Check for and output symlinks
SYM=`for y in "$COMPARE"; do
find /$DIRS/$y -maxdepth 1 -type l -print
done`
結果:
+ DIRS='home
home2
home3
old_home'
+ for i in '"$DIRS"'
+ pushd /home home2 home3 old_home/
+ for x in '"$DIRS"'
+ sort -n
+ du -s /home home2 home3 old_home/someuser someuser2 someuser3 someuser4
+ cut -f 2-
+ xargs -i du -sh '{}'
正如你所看到的,這是行不通的,因爲我希望它通過每個用戶在列表中,像這樣搜索(取決於他們的文件夾所在):
/home/user中 /家/ user2 /home2/user3 /home3/user4
有人可以建議一個更好/更有效的方法來做到這一點,實際工作嗎?我想弄清楚我是如何能夠整體壓縮這一點的。
猛砸版本:
GNU的bash,版本3.2.25(1)-release-下(x86_64-紅帽Linux的GNU的)
提前感謝!
你爲什麼要推的目錄,以目錄棧?另外,不需要創建一個'DIRS'變量;只需在'/ home/*中使用'for i;做' – chepner
這似乎是在bash腳本中有多個工作目錄的最好方法,因爲我想搜索服務器上找到的任何/ home *目錄。如果情況並非如此,我願意以更好的方式來做到這一點。 – Striketh
目錄堆棧僅僅使它更容易切換到以前使用的工作目錄;一次只有一個工作目錄。你永遠不會使用堆棧,因爲你永遠不會調用'cd'或'popd'。但是,您也永遠不會使用工作目錄,因爲您始終將目錄作爲顯式參數傳遞給'du'和'find'。 – chepner