Есть ли способ заставить ls показывать скрытые файлы только для определенных каталогов?

Есть ли способ заставить ls показывать скрытые файлы только для определенных каталогов?

У меня есть каталог, в котором независимо от пользователя и выбранных параметров я хотел бы всегда показывать скрытые файлы.

Я знаю, что -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вызова.

Связанный контент