
ディレクトリがありますが、どのユーザーやオプションを選択しても、常に隠しファイルを表示したいと思います。
そのオプションが隠しファイルを表示していることがわかります-a
。そのオプションを使用する決定を自動化したいと思います。
私が/home/userにいると仮定すると、隠しファイルを見ることに興味がありませんが、/filestopprocessにある場合は隠しファイルを見たいと思います。
この種の機能がありますか?
答え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 "$@"
}
関数の最初の部分は、ls
基本操作が完了したことを確認します。この場合.
(現在のディレクトリ)を引数#1に設定します。そうでなければ(与えられた)最初の引数がリストへのパスであると仮定します。
設定または指定されたパスがリストされているパターン(ここで...filestoprocessまたは...otherfilestoprocess)と一致する場合は、次のように引数にset
フラグを追加します。最後に、私-a
たちがまとめたパラメータを使ってcommand
実際のコマンドを呼び出します。ls
ありがとうムルset
単純化を指摘してください!
より多くのパスを追加するには、パターンを(|)
パイプ文字で区切って続けます。\
読みやすくするために、バックスラッシュエスケープ文字を使用して、既存の2つのパターンを別々の行に分割しました。
エイリアスを何かに追加した場合は、ls
そのエイリアスが優先され、関数が機能するには削除する必要があります。それ以外の場合は、エイリアスによって追加されたすべてのフラグが関数に渡されて終了します$1
。ls
特定のフラグをデフォルトで使用するには、対応する2つのcommand ls
呼び出しにそのフラグを追加するだけです。