2014-05-19 2 views
0

각 서브 디렉토리에 '.zip'파일이 있는지 여부를 판별하는 스크립트를 작성하려고합니다. 예를 들어 내가에서 일하고 있어요 디렉토리는 다음과 같을 수 있습니다 :디렉토리와 동일한 이름의 파일이 있는지 확인하십시오.

/folder1 
/folder2 
/folder3 
folder1.zip 
folder3.zip 

스크립트는 다음의 '.ZIP'는 "Folder2 폴더가"존재하지 않는 것을 인식하고 그것에 대해 뭔가를 할 것입니다.

지금까지 (아래)이 폴더를 통해 루프를 사용하여 왔지만 이제 디렉터리 경로를 파일 이름을 포함하는 변수로 변환하는 데 막혔습니다. if.zip 파일이 있는지 여부를보기 위해 if를 실행할 수 있습니다.

#!/bin/sh 

for i in $(ls -d */); 
do 
    filename= "$i" | rev | cut -c 2- | rev 
    filename="$filename.zip" 
done 
+2

'찾기. - 유형 d - 최대 깊이 1 | 읽는 동안 x; if [-f "$ x.zip"]; 다음 무언가; fi; 완료 ' – anishsane

답변

1
# No need to use ls 
for dir in */ 
do 
    # ${var%pattern} removes trailing pattern from a variable 
    file="${dir%/}.zip" 
    if [ -e "$file" ] 
    then 
    echo "It exists" 
    else 
    echo "It's missing" 
    fi 
done 

캡처 명령 출력은 여기 필요하지 않습니다,하지만 당신의 라인은이었을 것입니다 : 출력

#!/bin/sh 

for name in $(ls -d */); do 
    dirname=$(echo "${name}" | rev | cut -c 2- | rev) 
    filename="${dirname}.zip" 
    if [[ -f ${filename} ]] ; then 
     echo ${dirname} has ${filename} 
    else 
     echo ${dirname} has no ${filename} 
    fi 
done 

:

# For future reference only 
filename=$(echo "$i" | rev | cut -c 2- | rev) 
1

당신은 같은 것을 함께 할 수 있습니다 테스트 케이스 :

folder1 has folder1.zip 
folder2 has no folder2.zip 
folder3 has folder3.zip 

ls을 쓰지 않고이 작업을 수행하십시오.이 작업을 많이 수행하면이 작업이 중요 해지는 경향이 있지만이 경우에는 문제가되지 않습니다.

공간이 포함 된 파일 이름으로 테스트 해본 결과 알지 못했지만, 약간의 조정이 필요할 수 있습니다.

관련 문제