나는 파일이나 폴더가 어디에 있는지 기억이 나지 않을 때 가끔 이 명령을 사용합니다. locate
(이 명령은 더 많은 항목을 찾아서 .보다 더 많은 후보를 허용할 것 같습니다
. 하지만 제가 틀렸을 수도 있습니다.)find
하지만 당연히 다음과 같은 반응이 많이 나왔습니다.
locate clang
/data/sauvegardes/dev/Java/Experimentations/Angular4/bikes/node_modules/blocking-proxy/.clang-format
/data/sauvegardes/dev/Java/Experimentations/Angular4/bikes/node_modules/node-gyp/gyp/tools/Xcode/Specifications/gyp.xclangspec
/data/sauvegardes/dev/Java/Experimentations/Angular6/ng6-proj/node_modules/blocking-proxy/.clang-format
/data/sauvegardes/dev/Java/Experimentations/Angular6/ng6-proj/node_modules/node-gyp/gyp/tools/Xcode/Specifications/gyp.xclangspec
/data/sauvegardes/dev/Java/Experimentations/blog-demo/node/node_modules/npm/node_modules/node-gyp/gyp/tools/Xcode/Specifications/gyp.xclangspec
/data/sauvegardes/dev/Java/Experimentations/blog-demo/node_modules/blocking-proxy/.clang-format
/data/sauvegardes/dev/Java/Experimentations/blog-demo/node_modules/node-gyp/gyp/tools/Xcode/Specifications/gyp.xclangspec
/data/sauvegardes/dev/Java/Experimentations/ol-ext-angular/.metadata/.plugins/ts.eclipse.ide.server.nodejs.embed.win32.win32.x86_64/node-v6.9.4-win-x64/node_modules/npm/node_modules/node-gyp/gyp/tools/Xcode/Specifications/gyp.xclangspec
(201 responses)
이 명령을 파이프하여 및 를 사용하여 dirname
이름에 해당 단어가 포함된 디렉터리만 나열하거나 해당 단어가 포함된 하나 이상의 파일을 전달합니다.sort
uniq
locate clang | xargs -L1 dirname | sort | uniq
효과가있다...
/home/lebihan/dev/Java/comptes-france/metier-et-gestion/AdapterInboundWebEtude/etude/node_modules/node-gyp/gyp/tools/Xcode/Specifications
/home/lebihan/dev/Java/comptes-france/metier-et-gestion/AdapterInboundWebEtude/etude/node/node_modules/npm/node_modules/node-gyp/gyp/tools/Xcode/Specifications
/usr/include/boost/align/detail
/usr/include/boost/config/compiler
/usr/include/boost/predef/compiler
/usr/lib/linux-kbuild-6.1/scripts
/usr/lib/llvm-14/lib
/usr/lib/postgresql/14/lib/bitcode/postgres/commands
/usr/lib/x86_64-linux-gnu
/usr/local/go/misc/ios
/usr/local/go/src/debug/dwarf/testdata
/usr/local/go/src/debug/elf/testdata
/usr/local/go/src/debug/macho/testdata
/usr/share/doc
/usr/share/doc/libclang1-14
/usr/share/doc/libclang-cpp14
(108 responses)
하지만 실제로리눅스같은 일을 더 쉽게 할 수 있는 명령이 있나요?
답변1
음, GNU 시스템을 사용한다면 GNU를 사용하여 출력 형식을 지정할 수 find
있습니다 -printf
. sort
특정 작업에 대해 별도의 명령을 사용하는 것이 KISS 개념을 어느 정도 만족시키기 때문에 계속 유지하는 것이 좋습니다. 하지만 sort
존재하므로 -u
생략 uniq
할 수 있습니다.
find . -name '*targetstring*' -printf '%h\n' | sort -u
디렉터리 이름의 줄 바꿈을 처리하려면 약간의 추가 노력이 필요합니다.
find . -name '*targetstring*' -printf '%h\0' |
LC_ALL=C sort -zu |
tr '\0' '\n'
( LC_ALL=C
또한 유효한 텍스트로 구성되지 않거나 사용자의 로케일에서 동일한 순서의 문자를 포함하는 파일 경로의 문제를 방지합니다.)
기본 이름뿐만 아니라 경로의 어느 곳 이든 찾으려면 다음 -name
으로 바꾸십시오 .-path
targetstring
-z
-printf
GNU 확장입니다 .
답변2
zsh
껍질 에
(){ print -rC1 -- ${(u)@}; } **/*clang*(ND:h)
.을 포함하는 이름이 print
r
열에 1
C
표시 됩니다 .u
h
clang
익명 함수를 다음과 같이 하십시오 printu
(for독특한 프린팅) 그 중 하나를 말해보세요:
printu() print -rC1 -- "${(u)@}"
당신이 그것을 쓸 수 있습니다 :
printu **/*clang*(ND:h)
파일 헤더의 경우길(기본 이름뿐만 아니라) 다음이 포함됩니다 clang
.
set -o extendedglob
printu **/*~^*clang*(ND:h)
( ~
거긴 어디에 있어?와는 별개로확산 연산자 ^
및아니요확산 연산자).
답변3
제가 아는 한, 귀하의 요구 사항을 충족하는 항목은 아직 없습니다. 하지만 솔루션을 작성할 수 있다면 이를 명령(함수 또는 스크립트)으로 변환할 수 있습니다.
.bashrc
예를 들어, 이는 귀하의 또는 이에 상응하는 정의 에 포함될 수 있습니다 dlocate
.
dlocate() {
locate -0eb -- "$1" |
while IFS= read -d '' -r x; do [ -d "$x" ] && printf '%s\n' "$x"; done
}
또는 해당 스크립트를 생성하여 디렉터리에 나열된 디렉터리 중 하나에 넣을 수 있습니다 $PATH
(저는 일반적으로 $HOME/bin
또는 을 사용합니다 /usr/local/bin
.)
어느 쪽이든 이 명령은 제공된 이름 조각이 포함된 디렉터리를 dlocate
데이터베이스에서 검색합니다 . locate
예를 들어 다음을 포함하는 모든 디렉터리 이름과 일치합니다 net
.
dlocate net
내 시스템에는 다음과 같은 디렉토리가 포함됩니다.
/usr/include/net
/usr/share/doc/update-inetd
/usr/share/pixmaps/nethack
이 루프는 해당 필터와 일치하는 모든 파일 및 디렉터리가 반환되므로 while
디렉터리가 아닌 모든 항목을 제외해야 합니다 . locate
디렉토리에 대한 심볼릭 링크를 찾았지만 조건부 체인 [ -d "$x" ]
으로 확장하여 이를 제외할 수 있습니다.[ -d "$x" ] && [ ! -h "$x" ]