모든 숨겨진 디렉토리를 생략하고 현재 디렉토리 내용을 재귀적으로 파악하는 방법은 무엇입니까?

모든 숨겨진 디렉토리를 생략하고 현재 디렉토리 내용을 재귀적으로 파악하는 방법은 무엇입니까?

아래 조언을 따르십시오.이것질문, 아래와 같이 string주어진 디렉토리의 내용에서 문자열을 재귀적으로 찾을 수 있습니다.dir

grep -r --exclude-dir='.*' string dir

그러나 다음과 같이 현재 디렉토리에 적용하면

$ grep -r --exclude-dir='.*' string .
$ 

--exclude-dir='.*'해당 옵션은 현재 디렉토리가 일치하므로 숨겨진 것으로 무시하기 때문에 결과를 얻지 못합니다 '.*'.

해결 방법은 상위 디렉터리로 변경한 cd ..다음 해당 하위 디렉터리에서 명령을 실행한 다음 cd원래 작업 디렉터리로 다시 돌아가는 것입니다. 디렉터리를 변경하지 않고 이 작업을 수행하는 데 사용할 수 있는 명령을 사용하는 해결 방법이 있어야 합니다.

현재 디렉터리의 내용을 파악하고 숨겨진 디렉터리의 내용을 무시하는 단일 명령은 무엇입니까?

답변1

GNU grep 2.11 이상을 사용하는 경우 -r디렉토리가 지정되지 않으면 현재 디렉토리에서 시작됩니다.

grep -r --exclude-dir='.*' string

답변2

쉘 glob(파일 이름 패턴이라고도 함)에서는 .특별한 의미가 없으며 *0개 이상의 문자를 나타내고 ?단일 문자를 나타냅니다.

제외하려는 항목은 다음과 같은 점입니다.마지막 하나문자 뒤에 임의 개수의 문자가 옵니다. 따라서 다음을 사용하십시오.

grep -r --exclude-dir='.?*' string .

답변3

숨겨진 디렉터리는 기본적으로 탐색 bash되지 않으므로 (즉, 활성화되지 않음:grepdotglob

$ tree -a
.
├── .test
│   ├── .file
│   └── file
├── file
└── test
    ├── .file
    └── file

2 directories, 5 files

$ grep -r foo *
file:foo
test/.file:foo
test/file:foo

숨겨진 파일만 제외하세요.

$ grep --exclude=".*" -r foo *
file:foo
test/file:foo

답변4

내에서 재귀하나의디렉터리(하위 디렉터리의 숨겨진 파일을 제한하지 않음) 사용:

echo dir/*디렉터리의 모든 파일이 인쇄되는 것처럼 특정 디렉터리의 파일에도 적용됩니다 .

$ grep -r "string" $(echo dir/*)

dir(점) 으로 변경하면 .원하는 것을 얻을 수 있습니다.

$ grep -r "string" $(echo ./*)

하위 디렉터리에 숨겨진 파일이 없는 경우 다음을 사용하세요.

$ grep -r --exclude-dir='.*' "string"

또는 찾기를 사용하세요:

find . -not -path '*/\.*' -type f -exec grep "string" {} \+

관련 정보