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