이름에 "_BASE_"이 (가) 포함되지 않은 파일을 연결하고 싶습니다. 나는 그것이 줄의 어딘가에있을 것이라고 생각했다. ...unix : grep에서 일치하는 파일을 연결하는 방법
ls | grep -v _BASE_ | cat > all.txt
고양이 부분은 내가 옳지 않은 부분이다. 아무도 나에게 이것에 대해 어떤 생각을 줄 수 있습니까?
이름에 "_BASE_"이 (가) 포함되지 않은 파일을 연결하고 싶습니다. 나는 그것이 줄의 어딘가에있을 것이라고 생각했다. ...unix : grep에서 일치하는 파일을 연결하는 방법
ls | grep -v _BASE_ | cat > all.txt
고양이 부분은 내가 옳지 않은 부분이다. 아무도 나에게 이것에 대해 어떤 생각을 줄 수 있습니까?
이
ls | grep -v _BASE_ | xargs cat > all.txt
당신은 ls
이 --ignore
옵션을 사용하여 일부 파일을 무시하고 파일에 다음 고양이를 할 수보십시오.
ls --ignore="*_BASE_*" | xargs cat > all.txt
또한 당신은 xargs
없이 그렇게 할 수 있습니다
cat $(ls --ignore="*_BASE_*") > all.txt
UPD : 데일 Hagglund 눈치처럼 그 이름은 "일부 파일은"이 파일 이름, "일부"와 "파일로 나타납니다 ". --quoting-style=WORD
옵션을 사용할 수 없게하려면 WORD
은 shell
또는 escape
이 될 수 있습니다.
예를 들어 --quoting-style=shell
인 경우 일부 파일은 '일부 파일'로 인쇄되며 하나의 파일로 해석됩니다.
또 다른 문제는 출력 파일이 ls
ed 파일 중 하나와 같을 수 있다는 것입니다. 우리도 그것을 무시할 필요가 있습니다.
그래서 대답은 :
outputFile=a.txt; ls --ignore="*sh*" --ignore="${outputFile}" --quoting-style=shell | xargs cat > ${outputFile}
당신은 또한 하위 디렉토리에서 파일을 얻고 싶은 경우에,` '찾아 당신의 친구입니다 :
find . -type f ! -name '*_BASE_*' ! -path ./all.txt -exec cat {} >> all.txt \+
그것은 현재 디렉토리와 하위 디렉토리에있는 파일을 검색, 파일 (-type f
) 만 찾은 다음 와일드 카드 패턴 *_BASE_*
과 일치하는 파일을 무시하고 all.txt
을 무시하고 xargs
과 동일한 방식으로 cat
을 실행합니다.
+1 현재 디렉토리로 제한하려면 -maxdepth 1을 추가하십시오.이 이름은 해당 이름의 파일 공간도 깨끗하게 처리해야합니다. – jackrabbit
'* _BASE_ *'부분을 인용합니다 (그렇지 않으면 zsh에서 작동하지 않습니다). 또한 rm all.txt를 앞에두고 cat의 리디렉션을 >>로 지정하십시오. 끝의 +는 아마 a이어야합니다. – jackrabbit
\ + 고양이의 수를 줄이기위한 신중한 선택입니다. – tuomasjjrasanen
파일 이름에 공백이 포함되어 있지 않은 경우 이들 중 어느 것도 작동하지 않습니다. "Some File"과 같은 파일 이름은'cat'에 전달 될 때 "Some"과 "File"이라는 두 개의 파일 이름으로 나타납니다. –
대답을 수정했습니다. –