3

findFILE よりも古いファイルのリストを取得し、xargs(または) を使用してファイルを別の場所に移動するために を使用する計画があり-execます。物の移動は問題ではありません。| xargs mv {} ~/trash正常に動作します。

今、私が使用しようとすると! -newer FILEFILEリストに含まれていますが、これは望ましくありません!

ただし、このコマンド引数の機能は確かに論理的に理にかなっています。これは、次のように、「新しくない」が「同じまたは古い」と解釈される可能性が非常に高いためです。

$ find . ! -newer Selection_008.png -exec ls -l {} \;

比較引数からのファイルを含めます。

-rw-r--r-- 1 and and 178058 2012-09-24 11:46 ./Selection_004.png
-rw-r--r-- 1 and and 16260 2012-09-21 11:25 ./Selection_003.png
-rw-r--r-- 1 and and 38329 2012-10-04 17:13 ./Selection_008.png
-rw-r--r-- 1 and and 177615 2012-09-24 11:53 ./Selection_005.png

(ls -lは説明のために日付のみを表示するためのものです)

私が本当に必要としてfindいるのは-olderオプションですが、どれもリストされていませんfind(1)...

もちろん、出力をgrep -v、 usesedなどにパイプするか、環境変数を利用してファイル名 (fx. for grep -v) を再利用することで、次のような DRY 原則を楽しむことができます。

$ COMP=Selection_008.png find . ! -newer $COMP | grep -v $COMP | xargs ...

しかし、それはワンライナーのためにたくさん書いているようで、それは私が探しているものではありません.

より短い/簡単な方法はありますか、findまたはいくつかのオプションがありませんか? マンページを確認し、GoogleとSOを検索しました...

4

3 に答える 3

4

正確 -olderではありませんが! -samefile、特定のファイルを除外します。

$ find . ! -newer Selection_008.png ! -samefile -exec ls -l {} \;

これでも、ファイルとまったく同じ経過時間のファイルが捕捉されます。また、inode ベースであるため、リンクを扱う際にも注意が必要な場合があります。

于 2014-03-02T02:28:40.560 に答える
4

これを試すことができます:

find . ! -newer $COMP ! -name $COMP
于 2012-12-12T11:51:44.507 に答える
1

検索はこれをサポートしていないようです。testテストを次のように委任できます。

find . -exec test "{}" -ot "$COMP" \; -print

ファイルごとにフォークを実行するため、あまり効率的ではありません。

于 2012-12-12T12:22:48.283 に答える