編集する:

編集する:

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

おすすめ記事