我有一个目录,无论选择什么用户或选项,我都希望它始终显示隐藏文件。
我知道该-a
选项会显示隐藏文件。我只是想自动做出使用该选项的决定。
假设我在 /home/user 中,我不关心看到隐藏文件,但如果我在 /filestopprocess 中,我想查看隐藏文件。
这种类型的功能存在吗?
答案1
我能想到的最简单的方法是创建一个映射到函数的 shell 别名。假设我们正在使用 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
简化!
要添加更多路径,只需继续模式,用管道(|)
字符分隔它们即可。我使用反斜杠转义字符将两个现有模式分成单独的行,\
以使它们更易于阅读。
如果您已经ls
为某些内容添加了别名,则该别名将优先,并且需要将其删除才能使该函数正常工作(否则,别名添加的任何标志都将传递给该函数并最终出现在 中$1
)。如果您希望ls
默认使用某些标志,只需将它们添加到两个相应的command ls
调用中即可。