У меня есть каталог, в котором независимо от пользователя и выбранных параметров я хотел бы всегда показывать скрытые файлы.
Я знаю, что -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
Чтобы дополнить мой комментарий к ответу Джона Муна, вот функция, которая оборачивает 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
вызова.