概要
第一階層のディレクトリを抽出するスクリプト.
fish-shell V2.7.1 で動作確認済み.
コード
#!/usr/bin/env fish
#
# ルートファイルシステムの一覧を表示するプログラム.
# このとき、L_EXCLUDE_DIRS 変数で定義したディレクトリは表示対象外とする.
# find 実行対象外にしたいディレクトリを変数 L_EXCLUDE_DIRS に定義する
set -l L_EXCLUDE_DIRS "/lost+found" \
"/snap" \
"/proc" \
"/sbin" \
"/media" \
"/root" \
"/opt" \
"/srv" \
"/cdrom" \
"/lib64" \
"/mnt" \
"/run" \
"/tmp" \
"/lib" \
"/dev" \
""
# ファイルシステムの第一階層ディレクトリを動的に取得して、変数 L_TARGET_DIRS に格納する
set -l L_TARGET_DIRS ( find / -maxdepth 1 -mindepth 1 -type d )
echo "-------------------------------"
echo "[途中結果] L_TARGET_DIRS の内容"
echo "-------------------------------"
for i in $L_TARGET_DIRS
# 空行は表示しない
if test ! -z {$i}
echo $i
end
end
# L_TARGET_DIRS から L_EXCLUDE_DIRS に書かれた要素を削除する.
for i in ( seq 1 (count $L_EXCLUDE_DIRS) )
# 「string」は fish-shell のコマンドである.
# $L_TARGET_DIRS のうち、$L_EXCLUDE_DIRS[$i] に一致する文字列を '' に置換している.
set L_TARGET_DIRS ( string replace $L_EXCLUDE_DIRS[$i] '' $L_TARGET_DIRS )
end
echo ""
echo "-------------------------------"
echo "[最終結果] L_TARGET_DIRS の内容"
echo "-------------------------------"
for i in $L_TARGET_DIRS
# 空行は表示しない
if test ! -z {$i}
echo $i
end
end
実行結果
中間結果
では、find / -maxdepth 1 -mindepth 1 -type d の結果が全て表示されているが、
その後の 最終結果
では、L_EXCLUDE_DIRS で定義したディレクトリが除外されている.
-------------------------------
[途中結果] L_TARGET_DIRS の内容
-------------------------------
/lost+found
/export
/snap
/proc
/sbin
/media
/root
/opt
/var
/srv
/sys
/boot
/cdrom
/lib64
/bin
/mnt
/run
/home
/tmp
/lib
/dev
/usr
/etc
-------------------------------
[最終結果] L_TARGET_DIRS の内容
-------------------------------
/export
/var
/sys
/boot
/bin
/home
/usr
/etc
以上