ユーザーや選択したオプションに関係なく、隠しファイルを常に表示したいディレクトリがあります。
このオプションでは隠しファイルが表示されることはわかっています-a
。オプションを使用するかどうかの決定を自動化したいだけです。
たとえば、/home/user にいる場合は隠しファイルを表示する必要がありませんが、/filestoprcess にいる場合は隠しファイルを表示するようにします。
このような機能は存在しますか?
答え1
これを実行する最も簡単な方法は、関数にマップするシェル エイリアスを作成することです。たとえば、bash を使用していて、次のエイリアスを に追加します.bashrc
。
alias ls=ls_mod
次に、ls_mod
以下の関数を追加します。
ls_mod () {
DIRS_TO_SHOW_HIDDEN=(dir1 dir2 dir3)
for DIR in "$@"; do
for CHECK in "${DIRS_TO_SHOW_HIDDEN[@]}"; do
if [ "$(realpath "$DIR")" == "$CHECK" ]; then
ls -a "$DIR"
else
ls "$DIR"
fi
done
done
}
これをテストしていないので、完璧かどうかは疑問ですが、少なくともアイデアは伝わります。 に追加の引数を渡す作業が必要になる場合がありますls
。
答え2
John Moon の回答に対する私のコメントを具体化するために、パスが特定のリストに一致する場合にラップしてフラグls
を追加する関数を次に示します。-a
function ls() {
# if no arguments are provided, the current directory is assumed
[ "$#" -eq 0 ] && set .
case "$(realpath "$1")" in
(/path/to/jason/filestoprocess*|\
/path/to/jason/otherfilestoprocess*)
set -- -a "$1" ;;
esac
command ls "$@"
}
関数の最初のセクションでは、barels
が実行されているかどうかを確認します。この場合、.
(現在のディレクトリ) をパラメーター #1 として設定します。それ以外の場合は、(指定された) 最初のパラメーターがリストへのパスであると想定します。
設定されたパスまたは与えられたパスがリストされたパターン(ここでは...filestoprocessまたは...otherfilestoprocess)に一致する場合、set
再度を使用してフラグをパラメータに追加します-a
。最後に、を使用して、配置した引数でcommand
実際のコマンドを呼び出します。ls
ムル簡素化を指摘していただきありがとうございますset
!
さらにパスを追加するには、パイプ文字で区切ってパターンを続行するだけです。読みやすくするために、(|)
バックスラッシュ エスケープ文字を使用して、既存の 2 つのパターンを別の行に分割しました。\
すでに何かにエイリアスを設定している場合はls
、それが優先されるため、この関数を機能させるにはそれを削除する必要があります (そうしないと、エイリアスによって追加されたフラグがこの関数に渡され、 になってしまいます$1
)。 デフォルトで に設定したいフラグがある場合はls
、対応する 2 つの呼び出しにそれらを追加するだけですcommand ls
。