リスト内のフォルダーのディスク容量と、フォルダーのいずれかがシンボリックリンクであるかどうかを見つけるために、pushd で定義された複数のディレクトリを検索する方法を理解しようとしています。現在、複数のディレクトリで機能しない非常に非効率な for ループがあります (1 つしかない場合は問題なく動作しますが、pushd で複数の作業ディレクトリを定義し始めると、うまくいきません)。
アップデート:
参考までに $COMPARE の内容:
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 /home/user2 /home2/user3 /home3/user4
誰かが実際に機能するこれを行うためのより良い/より効率的な方法を提案できますか? これを全体的にどのように要約できるかを理解したいと思います。
バッシュのバージョン:
GNU bash、バージョン 3.2.25(1)-release-(x86_64-redhat-linux-gnu)
前もって感謝します!