2017-12-05 24 views
0

중첩 된 디렉토리의 모든 파일을 나열하려고하지만 해당 디렉토리에 이름에 공백이있는 일부 파일이 있습니다. 그래서 파일의 이름에 공백이없고 2 개의 다른 파일에있는 경로를 기록하고 싶습니다. BASH : 조건이 find 명령의 결과를 사용하여 어떤 파일을 쓸 것인지 결정합니다.

지금까지, 난 그냥이 명령으로 자신의 이름을 가진 자 공간을 찾는 방법을 알고
find /<my directory> -type f 
    if [ name has space] 
    then > a.txt 
    else > b.txt 
    fi 

가 사전에 감사합니다

find /<my directory> -type f -name * * 

내가 좋아하는 뭔가를 할 수 있습니다.

+0

확인이 발견'작동하는 경우/<내 디렉토리> 타입 F -name * *> a.txt이; find/ -type f -name *> b.txt' –

+0

@LohitGupta 여기에는 이름이 * b * 인 파일에 b.txt에 공백이 포함됩니다. 또한 몇 가지 인용 오류가 있습니다 (질문에서 복사되었지만). – tripleee

+0

'-name' 옵션의 매개 변수를 따옴표로 묶어야합니다. – Barmar

답변

0

간단한 -exec에 조건을 넣을 수 있습니다. -exec은 쉘 내장 명령을 직접 포함 할 수 없으므로 희망보다 다소 복잡합니다.

find "$path" -type f -exec sh -c 'for f; do 
    case $f in *\ *) dest=a;; *) dest=b;; esac; 
    echo "$f" >>$dest.txt 
    done' _ {} + 

즉, 발견 된 파일을 다음 sh -c ... 스크립트로 전달하십시오. (밑줄은 서브 쉘 안에 무언가로 $0을 채우는 것입니다.)

디렉토리 트리가 너무 깊지 않은 경우 find을 두 번 실행하는 것이 훨씬 쉽습니다.

find "$path" -type f -name '* *' >a.txt 
find "$path" -type f \! -name '* *' >b.txt 
+0

답장을 보내려하지 않았습니다. find : '-exec'에 대한 인수가 없습니다. 그리고 내 디렉토리가 너무 커서 find와 if를 결합하여 시간을 절약해야합니다. –

+0

원래의 대답에는'{}'이 없었지만 눈치 때 편집했습니다. 미안합니다. – tripleee

+0

작품, 고맙습니다. @tripleee –

0

를 사용하여 두 개의 분리 된 명령 :

find "$path" -type f -name '* *' > a.txt 
find "$path" -type f -not -name '* *' > b.txt