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
}
为了充实我对 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 "$@"
}
我能想到的最简单的方法是创建一个映射到函数的 shell 别名。假设我们正在使用 bash 并将以下别名添加到您的
.bashrc
:现在,添加以下
ls_mod
函数:我没有测试过这个,所以我怀疑它是否完美,但至少它给了你这个想法。您可能需要努力将额外的参数传递给
ls
.为了充实我对 John Moon 的回答的评论,如果路径与某个列表匹配,这里有一个函数会包装
ls
并添加一个标志:-a
函数的第一部分检查
ls
是否正在完成裸操作;在这种情况下,我们将.
(当前目录)设置为参数#1;否则,我们假设(给定的)第一个参数是要列出的路径。如果设置或给定的路径与列出的模式匹配(此处为 ...filestoprocess 或 ...otherfilestoprocess),那么我们
set
再次使用将-a
标志添加到参数中。最后,我们使用我们安排的参数command
调用实际命令。ls
感谢muru指出set
简化!要添加更多路径,只需继续模式,用竖线
(|)
字符分隔它们。我已经使用反斜杠转义字符将两个现有模式分成单独的行,\
以使它们更易于阅读。如果您已经
ls
给某个东西起了别名,那将优先考虑并且需要被删除才能使这个函数工作(否则,别名添加的任何标志都将被传递给这个函数并最终在 中$1
)。如果您希望在ls
默认情况下包含标志,只需将它们添加到两个相应的command ls
调用中。