
예를 들어 나는 내 디렉토리에 있습니다.
/home/myname
그런 다음 다른 디렉토리에 CD를 넣고 싶습니다.
/home/pulsar/...
다른 디렉토리로 꽤 깊이 들어가야 하는데 전체 줄을 입력하지 않고도 어떻게 이 문제를 해결할 수 있습니까? 나는 노력했다
cd */thedirectoryiwanttogointo
하지만 그건 작동하지 않습니다. 전체 줄을 입력해야 합니다.
답변1
아마도 다음과 같은 이유로 와일드카드가 작동하지 않을 것입니다.
- 귀하가 제공한 위치에서 와일드카드와 일치하는 항목이 없습니다.
- 경기가 1개 이상 있었습니다.
하위 디렉토리 사이를 자주 이동하는 일반적인 접근 방식(셸에서) 은 및 CDPATH
와 같은 기능을 사용하는 것입니다 . pushd
popd
이 CDPATH
기능(아마도 tcsh에서 처음 볼 수 있음)은 콜론으로 구분된 디렉터리 목록입니다. 귀하 이름의 부모가 thedirectoryiwanttogointo
합리적으로 고유한 경우 해당 부모를 목록에 추가할 수 있습니다.
더 읽어보려면(쉘의 매뉴얼 페이지가 먼저 와야 합니다):
- CDPATH란 무엇입니까?
- 3.4. 다음을 사용하여 디렉토리 변경
cd
(Red Hat Enterprise Linux 단계별 가이드) - C 쉘의 CDPATH를 변경하는 방법: csh 및 tcsh
pushd
popd
보다 최신이지만 여전히 CDPATH
1990년대 중반부터 사용됩니다. 이를 통해 현재 디렉터리를 저장(스택에 "푸시")하고 해당 cd
명령 중에 복원(스택에서 "팝핑")할 수 있습니다. 자세한 내용은 다음을 참조하세요.
다른 사람들은 쉘 별칭이나 기호 링크를 사용합니다. 잘 알려진 장소에 갈 때 가장 유용합니다.
답변2
가능한 모든 대상 디렉터리가 아래에 있고 /home
디렉터리 이름에 개행 문자가 없다고 가정하면 다음 셸 함수를 사용할 수 있습니다.
cds() {
cd "$(find /home -type d -name "$1" | head -n 1)"
}
$ cds thedirectoryiwanttogointo
물론, 아래에 있는 하위 디렉터리 및 파일 수 /home
와 OS가 메모리의 모든 트리를 캐시할 수 있는지 여부에 따라 성능이 크게 달라질 수 있습니다.
GNU 시스템에서는 대신 다음 구문을 사용하여 속도를 높이고 파일 이름에 개행 문자를 더 안정적으로 만들 수 있습니다.
cds() {
cd "$(find /home -type d -name "$1" -print -quit)"
}
첫 번째 일치 항목이 발견되자마자 검색이 중지됩니다.
인수는 패턴으로 간주되므로 다음을 수행할 수 있습니다.
cds 'foo*bar'
예를 들어 이름이 로 시작 하고 끝나는 cd
첫 번째 디렉토리(순서는 지정되지 않음)로 이동합니다 .foo
bar
답변3
시스템의 어느 위치에서나 경로를 찾으려면 와일드카드 확장을 원합니다. 패턴을 올바르게 지정하면 그렇게 할 수 있습니다.
cd /**/thedirectoryiwanttogointo
기본적으로 zsh 및 fish에서 작동합니다.Bash에서 처음이라면shopt -s globstar
, 안에tcsh 만약 당신이set globstar
, ksh93에서 set -o globstar
, yash
만약에 set -o extended-glob
.
이는 와일드카드가 /
현재 디렉터리에 대한 상대 경로가 아닌 다음으로 시작하는 절대 경로 내에서 사용되며 패턴 사용을 선택하면 **
하위 디렉터리 수에 관계없이 확장되기 때문에 작동합니다.
이것이 작동하는 동안,시간이 엄청나게 오래 걸릴 것 같다. 쉘은 일치하는 파일을 찾기 위해 전체 시스템을 검색해야 합니다. 검색 공간을 더 많이 잘라내기 위해 더 긴 접두사를 제공하면 이를 줄일 수 있습니다.
cd /home/pulsar/**/thedirectoryiwanttogointo/
더 자세히 드릴다운할수록 검색할 일이 줄어듭니다. 디렉토리 트리가 상당히 희박한 경우에는 시간이 많이 걸리지 않으며 실제로 사용하기에 실용적입니다. 후행은 /
발생할 수 있는 다양한 모호성을 제거하는 디렉터리로만 확장이 이루어지도록 보장합니다.
여전히 일치하는 항목이 두 개 이상 있으면 결과는 셸에 따라 달라집니다. Bash와 fish는 모호함을 무시하고 알파벳순으로 첫 번째 일치 항목으로 전환합니다. tcsh와 yash는 오류를 보고합니다. zsh와 ksh는 이를 고급 디렉터리 전환 기능 중 하나를 사용하려는 시도로 해석하고아마오류를 보고합니다.
동일한 디렉토리를 반복적으로 사용할 것 같으면 상위 디렉토리를 두거나~ 안으로CDPATH
$FOO
또는 긴 경로 대신 사용할 수 있는 셸 변수를 만드는 것이 더 나은 옵션입니다. **
자주 사용하는 경우 쉘 변수를 확장과 결합하여 더 많은 입력을 절약할 수 있습니다 .
답변4
항상 동일한 깊은 디렉터리로 이동하는 경우 간단한 해결책 중 하나는 해당 디렉터리에 대한 심볼릭 링크를 만드는 것입니다.
ln -s ~/foo/bar/baz/quux/etc/etc/etc/target ~/shortcut
이전에 해당 디렉토리로 이동한 경우 다른 해결책은 명령 기록에서 원하는 이름을 검색하는 것입니다. Ctrl-R과 검색할 문자를 누르세요. 이것은 bash에만 해당되지만 대부분의 최신 쉘에는 비슷한 기능이 있다고 생각됩니다.