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

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호출에 추가하기만 하면 됩니다.

관련 정보