grep -r --include = *. js *> dirname / .filename이 모든 .js 파일을 단일 파일에 쓰지 않는 이유는 무엇입니까?


1

디렉토리와 하위 디렉토리의 모든 js 파일을 어휘 순서대로 단일 파일에 넣으려고합니다. 내가 뭘 잘못 했어?


2
겠습니까 cat $(find ./ -type f -name "*.js" | sort) > dirname/.filename당신을 위해 작동?
txtechhelp

@txtechhelp 감사합니다. 가까이 있지만 이름이 2.js 및 3.js 인 파일은 /dirname/1.js 파일 위에 있습니다. 그것이 고칠 수 있다면 잘 작동합니다.
user5448026

나는 dir 이름 앞에 1을 넣을 수는 있지만 그렇게하지 않아도 좋습니다.
user5448026

목록에 dirname을 포함시켜야합니까? 아니면 어디에서 왔는지 파일 이름 만 있으면됩니까?

답변:


0

grep이것은 잘못된 도구입니다. 부분적으로 는 주어진 패턴 과 일치하는 파일에서 라인을 방출하기 때문에 (그리고 아마도 모든 라인 을 원할 것입니다 ) 부분적으로 패턴을주지 않았기 때문에 첫 번째 파일 이름을 사용합니다. 패턴 ( 유용 하지 않음 ).

모든 *.js파일을 나열하는 것은 충분히 쉽습니다.

find . -name '*.js'

그리고 하나의 파일로 연결하는 것도 쉽습니다.

find . -name '*.js' | xargs cat

그러나 파일 이름을 어휘 순서에 따라 정렬하고 디렉토리가 무엇이든간에 무시하십시오.

단지 평범한 일 sort을하지 않으며 --key필드 수를 알 수없는 경우 마지막 필드를 선택하는 옵션이 없습니다.

다음은 sed를 사용하여 파일 이름을 줄의 시작 부분으로 이동하고 정렬 한 다음 다시 벗 깁니다.

find . -name '*.js' | sed 's:^.*/\([^/]*\)$:\1 \0:' | sort | cut -d' ' -f2-

파일 또는 디렉토리 이름에 공백이 있으면 올바르게 작동하지 않습니다.

그런 다음 다음을 추가하여 내용을 추출 할 수 있습니다 cat.

find . -name '*.js' \
      | sed 's:^.*/\([^/]*\)$:\1 \0:' | sort | cut -d' ' -f2- \
      | xargs cat
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.