디렉토리가 있는데 어떤 사용자나 옵션을 선택하든 항상 숨겨진 파일을 표시하고 싶습니다.
해당 옵션이 숨겨진 파일을 표시한다는 것을 알고 있습니다 -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
호출에 해당 플래그를 추가하면 됩니다.