0

ファイルをある場所から別のディレクトリに移動しようとしています...プログラムはLog_Deleterを読み取り、各行に指定されたパラメータを使用してファイルを削除します。ファイルを実行すると、正常に動作しているように見えますが(エラーなし)、移動されたファイルはありません...ファイルが移動されない理由やエラーが表示されない理由がわかりません...誰かがエラーを特定できますか?

私の試み:

#!/bin/ksh

while read -r line ; do
    v=$line
    set -- $v
    cd /
    $(find "$1" -type f -name "$2" -mtime +"$3" -exec mv {} "$4" \;)
done < Log_Deleter.txt

Log_Deleter.txt

/usr/IBM/WebSphere/AppServer/profiles/AppSrvSIT1/logs/Server1 'SystemOut_*' 5 /backup/Abackuptest1
/usr/IBM/WebSphere/AppServer/profiles/AppSrvSIT1/logs/Server2 'SystemOut_*' 5 /backup/Abackuptest2

ご協力いただきありがとうございます!

4

2 に答える 2

1

'Findは、名前にリテラルが含まれているファイルを探しています。$2findを呼び出す前に、から一重引用符を削除する必要があります。試す:

#!/bin/ksh

while read -r path name mtime dest ; do
    name=$( echo $name | tr -d "'" )
    find "$path" -type f -name "$name" -mtime +"$mtime" -exec mv {} "$dest" \;
done < Log_Deleter.txt
于 2012-11-01T20:16:12.160 に答える
1

問題は、名前に実際に一重引用符が含まれているファイルを照合しようとしていることです。

他の問題を除けば、Log_Deleter.txtから引用符を取り出しれば、スクリプトはおそらく機能すると思います。

引用符は、シェルがコマンド入力を解析している場合にのみ意味があります。これはreadビルトインが行うことではありません。また、コマンド入力を読み取る場合でも、引用符が変数に入ると、シェルのCLIレイヤーで再度読み取らない限り、引用符は永久にそこにとどまります。eval.

シェルは正確にはマクロプロセッサではありません。これは、少しのCLI、少しのプログラミング言語、そして少しのマクロプロセッサという複雑なハイブリッドです。

そして、evalと言えば、findevalのような構造でラップする必要はありません。スクリプトを単純化してfind直接実行すると、デバッグと理解が容易になります。

于 2012-11-01T20:29:50.840 に答える