편집하다:

편집하다:

clean-logs.sh다음 코드 가 있습니다 /var/log/fleet3/zok/.

#!/bin/bash

for dir in /var/log/fleet3/zok/*/ ; do
    cd $(dir)
    pwd #rm -rf *
    cd ..
done

그리고 파일은 하위 디렉터리뿐만 아니라 반복됩니다... 예, 해당 디렉터리 내에 하위 디렉터리가 있고 해당 하위 디렉터리 내에 파일이 있습니다. 뭐가 문제 야? 나는 단지 하위 디렉토리를 반복하고 싶습니다.

편집하다:

스크립트를 실행하면 출력은 다음과 같습니다.

[user@machine zok]# ./clean-logs.sh
./clean-logs.sh: line 4: cd: clean-logs.sh: Not a directory
/var/log/fleet3/zok
/var/log/fleet3/zok
/var/log/fleet3/zok
/var/log/fleet3/zok
/var/log/fleet3/zok
/var/log/fleet3/zok
/var/log/fleet3/zok
/var/log/fleet3/zok
/var/log/fleet3/zok
/var/log/fleet3/zok

terdon의 답변으로 문제가 해결되었습니다. $(variable)잘못 사용했습니다.${variable}

답변1

귀하의 문제가 무엇인지 정말로 이해하지 못합니다. 귀하의 스크립트는 디렉토리만을 반복합니다. 이것은 마지막 /항목 에 의해 보장됩니다 for dir in /var/log/fleet3/zok/*/. 그런데 이 구조를 잘못 이해하고 있기 때문에 매우 심각한 문제에 봉착하게 됩니다 $(foo).

$(foo)달릴 것이다주문하다 foo그런 다음 출력을 반환합니다. 예를 들어:

$ echo $(pwd)
/home/terdon

변수를 실행하지 않고 사용하려는 것 같으므로 명령은 다음 cd과 같아야 합니다.

cd "$dir"

설마 cd $(dir).

또한 모든 하위 디렉터리를 삭제하려면 /var/log/fleet3/zok/루프나 스크립트가 필요하지 않고 실행하기만 하면 됩니다 rm -rf /var/log/fleet3/zok/*/. 또는 어떤 이유로든 루프를 정말로 원하는 경우 다음과 같이 단순화할 수 있습니다.

#!/bin/bash

for dir in /var/log/fleet3/zok/*/ ; do
    rm -rf "$dir"/*
done

관련 정보