1

複数のフォルダーを持つディレクトリがあります。60過去数分間変更されていないフォルダーの名前のリストを取得したいと考えています。フォルダには古いままの複数のファイルが含まれるため、使用できません-mmin +60

私は逆でも何かできると思っていました。60数分で変更されたファイルのリストを取得し、-mmin -60このリストの逆を出力します。

それを行うかどうかわからない、またはそうするより簡単な方法があるかどうか?

最終的には、これらのフォルダーのリストを perl スクリプトで取得し、それらをリストなどに追加します。

これは、これまでのところ、フォルダーのリストを取得するために持っているものです

find /path/to/file -mmin -60 | sed 's/\/path\/to\/file\///' | cut -d "/" -f1 | uniq

上記は、更新されたフォルダーの名前だけを示しています。

4

2 に答える 2

1

sort と uniq を使用して、このようにテキスト行で集合操作を行うための巧妙なトリックがあります。すでに更新されたパスがあります。それらがupdというファイルにあると仮定します。シンプルfind -type dにすべてのフォルダーを提供できます。それらがすべてファイルにあると仮定しましょう。次に実行します

cat all upd | sort |uniq -c |grep '^1'

両方のファイルに表示されるすべてのパスには、先頭に 2 のカウントが付きます。ファイル all にのみ出現するすべてのパスには、1 が前に付けられます。1 が前に付けられた行は、all と upd の間の設定の違い、つまり変更されていないパスを表します。(プレフィックス1を自分で削除できると思います。)

確かに、これは perl やその他のスクリプト言語で実行できますが、この単純な sort|uniq はあまりにも優れています.-)

于 2013-11-06T23:02:22.890 に答える
1

diff コマンドはこのために作られています。

「すべて」の 2 つのファイルが与えられた場合:

# cat all
/dir1/old2
/dir2/old4
/dir2/old5
/dir1/new1
/dir2/old2
/dir2/old3
/dir1/old1
/dir1/old3
/dir1/new4
/dir2/new1
/dir2/old1
/dir1/new2
/dir2/new2

および「更新済み」:

# cat updated
/dir2/new1
/dir1/new4
/dir2/new2
/dir1/new2
/dir1/new1

ファイルを並べ替えて、diff を実行できます。このタスクでは、インライン ソートを好みます。

# diff <(sort all) <(sort updated)
4,6d3
< /dir1/old1
< /dir1/old2
< /dir1/old3
9,13d5
< /dir2/old1
< /dir2/old2
< /dir2/old3
< /dir2/old4
< /dir2/old5

「すべて」にないファイルが「更新済み」にある場合は、接頭辞「>」が付けられます。

于 2013-11-07T05:41:29.653 に答える