我有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