사용자 또는 선택한 옵션에 관계없이 항상 숨겨진 파일을 표시하고 싶은 디렉토리가 있습니다.
-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
호출에 추가하기만 하면 됩니다.