처음 4개 디렉터리의 경로를 잘라냅니다.

처음 4개 디렉터리의 경로를 잘라냅니다.

동일한 명령을 사용해야 하는 여러 프로젝트가 있습니다. 프로젝트는 언제나

/home/[username]/public_html/[prjectname]/

내 프로젝트의 모든 디렉터리에서 이 명령을 실행하고 싶기 때문에 프로젝트 라이브러리를 알아야 합니다. 시도했지만 ${path:0:20}사용자 이름과 프로젝트 이름의 문자열 길이가 다르기 때문에. 난 그냥 알아야 해경로의 처음 네 부분.

답변1

당신은 이미 그것을 언급했습니다 cut. 구분 기호를 으로 설정하면 됩니다 /. 약간 직관적이지 않은 부분은 첫 번째 필드 앞의 부분 /도 (빈) 필드로 계산되므로 필드 1-5가 필요하다는 것입니다.

echo /1/2/3/4/5/6/7 | cut -d/ -f1-5

밝혀지다

/1/2/3/4

답변2

zsh셸 에서 if $varis /1/2/3/4/5/6, ${var:h1}is /, ${var:h2}is /1, ${var:h3}is 등 /1/2(h머리csh, / 와 동일 vim하며 숫자 접미사는 zsh확장자입니다)

그래서 여기서 떠나는 /home/user/public_html/projectX것은file=/home/user/public_html/projectX/a/b

dir=${file:h5}

일치하는 모든 디렉토리를 반복하려면 /home/*/public_html/*다음을 수행하십시오.

for dir in /home/*/public_html/*(N/); do
  something with $dir
done

( 디렉토리도 포함하는 심볼릭 링크 (N/)로 바꾸십시오. 어떤 경우든 첫 번째 링크는 위 디렉토리에 대한 심볼릭 링크와도 일치합니다.)(N-/)*

이것은(N/)글로벌 예선, 기능에 따라 다릅니다 zsh.

답변3

(이중) "매개변수 확장: 일치하는 접두사/접미사 패턴 제거"를 고려할 수 있습니다.

$ path=/home/[username]/public_html/[prjectname]/abc/xyz
$ echo "${path%"${path#/*/*/*/*/}"}"
/home/[username]/public_html/[prjectname]/

외부 명령이 필요하지 않습니다.

답변4

이 시도,

 find /path/to/dir -mindepth 4 -type d | cut -d"/" -f -5 | sort -u
  • type -d목차만 인쇄됩니다.
  • mindepth최소 4개의 하위 디렉터리가 있는 디렉터리가 인쇄됩니다.
  • -d"/"/자르기 위한 구분 기호 로 사용됨
  • -f -5다섯 번째 열의 모든 항목을 삭제합니다.
  • sort -u인쇄물이 정렬될 고유 폴더 경로입니다.

관련 정보