Zsh 개발 가이드 (열 번 째 파일 찾기 및 일괄 처리)

8163 단어 shellzshlinux
독 서 를 지도하 다
특정 조건 을 만족 시 키 는 파일 경 로 를 찾 습 니 다. 파일 찾기 라 고 부 르 는 것 은 셸 스 크 립 트 의 흔 한 작업 입 니 다. 조건 이 복잡 하고 다양 하기 때문에 이런 작업 은 쉽 지 않 습 니 다.많은 사람들 이 find 명령 을 사용 하지만 find 는 일부 기능 만 덮어 쓸 수 있 습 니 다. 다른 것 은 스스로 처리 해 야 합 니 다. 또한 find 는 사용 하기 어렵 고 스 크 립 트 의 다른 부분 과 협조 하 는 것 도 번 거 로 워 서 오류 가 발생 하기 쉽 습 니 다.zsh 를 사용 하면 기본적으로 find 명령 이 필요 하지 않 습 니 다. zsh 자체 의 기능 을 통 해 대부분의 장면 에 대처 할 수 있 고 문법 이 더욱 우아 하고 간결 하 며 실수 하기 쉽 지 않 습 니 다.
간단 한 예
zsh 로 시작 하 는 파일 을 보 여 줍 니 다.
#   -l          ,          ,  print -l         
% print -l /usr/bin/zsh*
/usr/bin/zsh
/usr/bin/zsh-5.4.1
/usr/bin/zshdb

ls/usr/bin/zsh 를 사용 하면 된다 고 할 수도 있 습 니 다.ls 를 사용 하면 적지 않 은 외부 작업 이 추 가 됩 니 다. zsh 는 파일 경로 와 일치 하기 때문에 결과 가 나 왔 습 니 다. ls 에 게 전 달 된 후에 ls 는 stat 에 가서 그 파일 들 을 보 여 주 었 습 니 다. 이것 은 완전히 불필요 한 작업 입 니 다. 파일 목록 이 길 면 많은 시간 을 소모 해 야 합 니 다.당연 해 보 이 는 셸 용법 에는 이런 문제 가 많다.그래서 명령 을 내리 거나 스 크 립 트 를 쓸 때 결과 가 정확 하 다 고 보지 않 으 면 됩 니 다. 그 이 유 를 알 아야 합 니 다.print - l 이 너무 길 면 alias 개 pl 이면 됩 니 다. print - l 은 자주 사용 합 니 다.
abc 1234. tmp (앞 글자 뒤의 숫자, 개 수 는 제한 되 지 않 지만, 최소한 한 글자 의 숫자) 와 같은 모든 파일 을 삭제 합 니 다. 하위 디 렉 터 리 에 있 는 것 을 포함 합 니 다.
% setopt EXTENDED_GLOB
# /**/        
# ##             ,        0
% rm -v /tmp/**/[a-zA-Z]##.tmp
removed '/tmp/yaourt-tmp-goreliu/abc123.tmp'

setopt EXTENDED_GLOB 는 확 장 된 마스크 지원 을 사용 합 니 다. 본 논문 의 후속 내용 은 기본적으로 이 옵션 이 열 렸 습 니 다. 그렇지 않 으 면 마스크 기능 이 너무 약 합 니 다. zshrc 에 쓰 는 것 을 권장 합 니 다.어댑터 의 내용 은 전에 이미 말 했 으 니 매 뉴 얼 에서 참고 할 수 있 습 니 다.
두 개의 작은 예 가 다 데 운 후에 본론 으로 들 어가 기 시작 했다.
파일 속성 으로 찾기
파일 경로 와 일치 하 는 것 을 제외 하고 파일 속성 에 따라 찾 아야 할 때 가 많 습 니 다. 예 를 들 어 파일 형식, 권한, 크기, 수정 시간 등 입 니 다.여기에 새로운 것, 마스크 수식 어 를 사용 해 야 한다.
먼저 예 를 들 어 그것 의 모습 을 보 자.현재 디 렉 터 리 와 하위 디 렉 터 리 의 모든 일반 파일 을 보 여 줍 니 다 (즉, ls - l 결과 의 첫 번 째 는 - 파일, 비 디 렉 터 리, 심 볼 릭 링크, 장치 파일, socket, FIFO 등).
% print -l **/*(.)
a.txt
b/htm

여 기 는 이전의 예 보다 끝 에 있 는 작은 괄호 가 많아 졌 고 안에 점 이 하나 있다.이 작은 괄호 와 안의 내용 은 바로 마스크 수식어 로 파일 속성 에 따라 파일 과 일치 하 는 데 사 용 됩 니 다.점 (.) 은 일반 파일 을 대표 합 니 다.
더 많은 예:
#             ,F      
% print -l *(/F)

#            ,^    
% print -l *(/^F)

#                        ,           
% print -l *(@,.x)

#      0644        
% print -l *(.f0644)

그렇다면 어떤 사용 가능 한 마스크 수식어 가 있 는 지 살 펴 보고 더 복잡 한 예 를 들 자.
마스크 수식어 목록
명칭.
속뜻
사용 사례 또는 보충 설명
/
목차
F
헛 되 지 않다
/F (빈 디 렉 터 리)/^ F (비 빈 디 렉 터 리)
.
일반 파일
@
심 볼 릭 링크
=
소켓 파일
p
FIFO 파일
*
실행 가능 한 일반 파일
%
장치 파일
%b
블록 장치 파일
%c
문자 장치 파일
r
파일 은 읽 기 권한 이 있 습 니 다.
w
파일 에 쓰기 권한 이 있 습 니 다.
x
파일 은 실행 권한 이 있 습 니 다.
A
파일 은 그룹 사용자 에 게 읽 기 권한 이 있 습 니 다.
I
파일 은 그룹 사용자 에 게 쓰기 권한 이 있 습 니 다.
E
파일 은 그룹 사용자 에 게 실행 권한 이 있 습 니 다.
R
모든 사용자 에 게 읽 기 권한 이 있 습 니 다.
W
모든 사용자 에 게 쓰기 권한 이 있 습 니 다.
X
모든 사용자 에 게 실행 권한 이 있 습 니 다.
s
setuid 파일 설정
S
setgid 파일 설정
t
고정 비트 (sticky bit) 파일 설정
f
지정 한 권한 에 부합
f0644 f4755 f700
e
내용 업데이트 대기
+
내용 업데이트 대기
d
지정 장치 번호
l
하 드 연결 개수
l - 2 (2 이하) l + 3 (3 이상)
U
현재 사용자 보유
G
현재 사용자 가 있 는 그룹 소유
u
지정 한 사용자 id 보유
u1000
g
지정 한 사용자 그룹 id 보유
g1000
a
지정 한 파일 의 atime
아래 에 설명 이 있다
m
지정 한 파일 의 mtime
아래 에 설명 이 있다
c
지정 한 파일 의 ctime
아래 에 설명 이 있다
L
파일 크기 지정
아래 에 설명 이 있다
^
반대 하 다
/^F
-
내용 업데이트 대기
M
내용 업데이트 대기
T
내용 업데이트 대기
N
일치 하지 않 으 면 빈 곳 으로 돌아 가 잘못 보고 하지 않 습 니 다.
D
숨겨 진 파일 포함 (. 시작)
n
수치 크기 로 정렬
아래 에 설명 이 있다
o
점 증 정렬
아래 에 설명 이 있다
O
체감 정렬
아래 에 설명 이 있다
[n]
이전 n 개 파일 만 가 져 오기
.[5]
[n1,n2]
n1 부터 n2 까지 파일 가 져 오기
/[5,10]
:X
내용 업데이트 대기
더 복잡 한 용법
파일 시간 에 따라 파일 찾기
#               
% print -l *(.m-1)

#                
% print -l *(.aM+1)

m 뒤에 단 위 를 추가 할 수 있 습 니 다. 단위 가 없 으 면 기본 값 은 하늘 입 니 다.기타 단위: M (월), w (주), h (시간), m (분), s (초). +시간 을 정 하기 전에... - 시간 을 정 하 는 거 예요.
a 는 마지막 방문 시간 (atime) 이지 만 파 티 션 마 운 트 시 noatime 또는 realime (/proc/mount 확인 가능) 을 지정 하면 atime 은 실제 마지막 방문 시간 이 아 닙 니 다.m 는 마지막 수정 시간 (mtime) 입 니 다. 파일 속성 (예 를 들 어 권한) 의 수정 을 포함 하지 않 고 내용 수정 을 말 합 니 다.c 는 마지막 상태 수정 시간 (ctime) 입 니 다. 파일 내용 이 수정 되 지 않 고 파일 속성 이 바 뀌 면 이 시간 에 업 데 이 트 됩 니 다.이해 가 안 되면 인터넷 에서 관련 글 을 검색 하 세 요.
파일 크기 로 파일 찾기
#           2k    
% print -l *(.Lk-2)

#           1m    
% print -l *(.Lm+1)

#            ,    m      ,      0 m    1 m,   0.5 m
#     1     0 m,    
% print -l *(.Lm-1)

기본 단 위 는 바이트 이 고 k, m, p (512 바이트 의 블록) 도 사용 할 수 있 으 며 대문자 K, M, P 도 사용 할 수 있 습 니 다. 의미 가 같 습 니 다.
파일 정렬
#       ,                ,           
% print -l **/*(.on)
bb.txt
cc/aa.txt
cc/dd.txt
zz.txt

#            ,d       ,O    
% print -l **/*(.Od)
zz.txt
bb.txt
cc/dd.txt
cc/aa.txt

#        ,        ,                  
% print -l **/*(.onoL)
bb.txt
cc/aa.txt
cc/dd.txt
cc.txt

세 번 째 예 처럼 여러 번 배열 할 수 있다.
정렬 가능 한 요소: n (파일 이름, 정렬 옵션 이 지정 되 지 않 으 면 기본적으로 파일 이름 으로 배열 합 니 다. 즉, on), L (크기), l (하 드 연결 수), a (atime), m (mtime), c (ctime), d (소재 디 렉 터 리 깊이, 깊이 에서 얕 은 줄).
조합 사용
이제 우 리 는 어떤 사용 할 수 있 는 마스크 수식어 가 있 는 지 대충 알 게 되 었 고, 한 사람 만 사용 하 는 것 은 이미 아무런 문제 가 없다.그러나 여러 개 를 동시에 사용 하면 어떻게 조합 하 느 냐 가 문제 다.
유형 과 유형 간 에 쉼표 로 구분 해 야 합 니 다. 유형 을 지정 하지 않 으 면 모든 유형 이 가능 합 니 다. 쉼표 전후의 내용 은 서로 간섭 하지 않 습 니 다 (반 ^ 작업 은 쉼표 이전 내용 에 만 영향 을 줍 니 다).같은 유형 은 여러 옵션 을 동시에 추가 할 수 있 고 순서대로 추가 하면 됩 니 다.
#                
#      3 m           
#             (      )
% print -l *(/m-2,.Lm-3oL,@D)

파일 일괄 이름 바 꾸 기
파일 의 이름 을 대량으로 바 꾸 는 것 은 비교적 흔히 볼 수 있 는 장면 이다.Zsh 에는 일괄 이름 을 쉽게 바 꿀 수 있 는 매우 편리 한 명령 이 있 습 니 다.
#           
% autoload -U zmv

#     txt         conf
#           ,$1               
%  zmv '(*).txt' '$1.conf'

#      -W   ,zmv                 
%  zmv -W '*.txt' '*.conf'

#              
% zmv '(*).(*).txt' '$2.$1.txt'
#   -n         
% zmv -n '(*).(*).txt' '$2.$1.txt'
mv -- a.b.txt b.a.txt

# 0 1 2 ...     0,    10 11 12 ...     
% zmv '([0-9]).(*)' '0$1.$2'
#         0
% zmv '(0)(*)' '$2'

#        
% zmv '(*) - (*) - (*).txt' '$1/$2 - $3.txt'

#      
% zmv '(*).txt' '${(U)1}.txt'
% zmv '(*).txt' '${(L)1}.txt'

부전 개통 부적
때때로 우 리 는 개통 부 호 를 전시 하고 싶 지 않다. 예 를 들 어 내 가 계산 한 함 수 를 calc 라 고 썼 다.
calc() {
    zmodload zsh/mathfunc
    echo $(($*))
}

% calc 12+12
24

하지만 내 가 12 * 12 를 계산 하고 싶다 면:
% calc 12*12
zsh: no matches found: 12*12

따옴표 가 붙 지 않 으 면 별표 가 마스크 로 사용 되 고 12 * 12 에 맞 는 파일 이름 을 찾 아 잘못 보고 한 것 을 모두 찾 지 못 합 니 다.서 류 를 찾 고 싶 지 않 습 니 다.
noglob 명령 은 뒤의 내용 을 펼 치 는 마스크 를 금지 할 수 있 습 니 다. 따옴표 가 필요 없습니다.
% noglob calc 12*12
144

그리고 alias 를 쓸 수 있 습 니 다.
% alias js="noglob calc"
% js 12*12
144

이렇게 하면 계산 기 를 더욱 편리 하 게 사용 할 수 있다.
총결산
본 고 는 파일 에서 찾 는 마스크 수식어 의 용법 을 소개 하고 대부분 자주 사용 하 는 마스크 수식어 도 열거 하 였 으 며, 또 일부분 은 더 복잡 하거나 더 적 게 사용 하 는 일시 적 공백 도 있어 나중에 보충 할 수 있 습 니 다.이러한 마스크 수식 어 는 전부 기록 할 필요 가 없 으 며, 자주 사용 하 는 것 을 익히 고, 나머지 는 사용 할 때 다시 조회 하면 된다.
레 퍼 런 스
http://www.bash2zsh.com/zsh_r...
http://blog.sina.com.cn/s/blo...
역 사 를 갱신 하 다
2017.08.31: "비 전시 개통 어댑터"와 "파일 일괄 이름 바 꾸 기"를 추가 합 니 다.
본 고 는 더 이상 업데이트 되 지 않 습 니 다. 전체 시 리 즈 는 여기 서 유지 보 수 를 업데이트 합 니 다. github.com/goreliu/zshguide
유 료 로 Windows, Linux, Shell, C, C++, AHK, Python, JavaScript, Lua 등 분야 관련 문 제 를 해결 하고 유연 하 게 가격 을 책 정 합 니 다. 상담 을 환영 합 니 다. 위 챗 ly 50247.

좋은 웹페이지 즐겨찾기