ls가 특정 디렉토리의 숨겨진 파일만 표시하도록 하는 방법이 있습니까?

ls가 특정 디렉토리의 숨겨진 파일만 표시하도록 하는 방법이 있습니까?

디렉토리가 있는데 어떤 사용자나 옵션을 선택하든 항상 숨겨진 파일을 표시하고 싶습니다.

해당 옵션이 숨겨진 파일을 표시한다는 것을 알고 있습니다 -a. 해당 옵션을 사용하기로 한 결정을 자동화하고 싶습니다.

내가 /home/user에 있다고 가정하면 숨겨진 파일을 보는 데 관심이 없지만 /filestopprocess에 있으면 숨겨진 파일을 보고 싶습니다.

이런 종류의 기능이 존재하나요?

답변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호출에 해당 플래그를 추가하면 됩니다.

관련 정보