findのexec関数を使う

findのexec関数を使う

forループで次のことを試みます。

  • 基準を満たすファイルを探す
  • ファイル名をログファイルにエコーします。
  • ファイルを圧縮します。

スクリプトがファイルを見つけてその名前を画面に表示させることはできますが、ファイルにパイプすることはできません。 (まだgzip部分はテストしていません)

以下はスクリプトの関連部分です($LOGCLEAN_FILEスクリプトの前の部分に存在して作成されました)。

for F in `find . -type f \( ! -name '*.gz' \) -a \( ! -name '*.Z' \) -mtime +7`
do

        {
        print "Will be compressing file  ${F}" >> $LOGCLEAN_FILE
        } ; 
        ##gzip $F
done

テキストなしでスクリプトを実行すると、" >> $LOGCLEAN_FILE"出力が画面に表示されます。

私は何が間違っていましたか?

批判を歓迎します。私はまだ学んでいます。

ベストアンサー1

find実際、シェルループで出力を再現する必要はありません。梱包したい場合ファイル名一覧、一般式は次のとおりです。

find ... | gzip > logfile.gz

圧縮したい場合ファイル自体、次のようになります。

find ... | tar -czvf archive.tar.gz -T -

処理するファイル名のリスト(それぞれ標準入力を表す)tarをファイルから読み取るように指示します。--TAKA--files-from=オプションはGNU tarにあります。他のバージョンはわかりません。)もちろん、\n名前を含むファイルを処理すると、このオプションは中断されます。

おすすめ記事