2

以下の Unix コマンドは、完全に機能する最後の 30 分間に変更されたファイルのリストを取得するために使用されます。

touch -t 02231249.00 /tmp/last30min
find /mydirectory -type f -newer /tmp/last30min
rm /tmp/last30min

これらのファイルを gzip してホームまたは tmp ディレクトリに移動するコマンドを教えてください。

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

4

2 に答える 2

2

xargsジョブを実行するには、find コマンドの引数を null 文字で区切ってパイプします (ファイル名に空白が含まれている場合は重要です)。

find /mydirectory -type f -newer /tmp/last30min -print0 | xargs -0 -I{} sh -c 'gzip "{}"; mv "{}".gz ~'

where-I{}は、コマンド内のすべてを入力行、つまり によって検出された現在のファイルxargsに置き換えるように指示します。{}find

Z シェル ( zsh) を使用している場合は、はるかに簡単で、すべてをワンライナーで実行できます。

for i (/mydirectory/**/*(mm-30)) { gzip $i && mv $i.gz ~ }

ここでは**再帰的に検索し、最後の (-) 30分で変更されたことを意味します。(mm-30)

于 2013-02-23T10:56:28.293 に答える
1

タッチコマンドが正しく機能しません。タイムスタンプを確認しました。タイムスタンプは次の日付のものです。

$ touch -t 02231249.00 /tmp/last30min
$ perl -e'print scalar localtime((stat("/tmp/last30min"))[9])'
Sat Feb 23 12:49:00 2013jamie@jamie-Ideapad-Z570:~/temp$ 

このコマンドはあなたが求めていることを実行すると思います

for f in `find . -mmin -30 -print`;do echo $f;gzip -c $f > $HOME/$f.gz;done
于 2013-02-23T11:02:07.463 に答える