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