0

私がやろうとしていることは非常に具体的です。integer.name に基づいてディレクトリからファイルを削除するコードが必要です。

ディレクトリ内のファイルは次のようにリストされます

441.TERM (the # is actually a PID so it'll be random)
442.TERM

常に最初の.TERMファイルを保持し、その後は.TERMファイルを削除したいのですが、スクリプトによって作成されるファイルは1つしかないため、スクリプトを作成しているシステムの問題が原因で発生することがあります. 000.TERM ファイルにのみ影響を与えたいだけです。ディレクトリ内で見つかった他のファイルはそのままにしておくことができます。したがって、ディレクトリに、最初に見つかったものよりも大きい整数を持つ .TERM ファイルが含まれている場合は、大きい整数を持つ .TERM ファイルを削除します。

PS。混乱がある場合に備えて、.TERM は拡張子ではありません。

4

1 に答える 1

2
find /your/path -name "*.TERM" | sort -t. -k1 -n | tail -n +2 | xargs -r rm

それを分解しましょう:

  • find /your/path -name "*.TERM"すべてのファイルのリストを出力し.TERMます。

    も使用できls /your/path/*.TERMますが、出力が予測できない場合があります。(例: 実装が-Fデフォルトで on になっている可能性があります。これにより、すべてのソケットが=リストの a で終了します。)

  • sort-k1区切り文字としてピリオドを使用して、最初のフィールド ( ) で並べ替えます( -t.)。-n数値ソートを保証します (5 が 06 より前になるように)。

  • tail -n +2最初の行をスキップして残りを返します

  • xargs rmすべての出力行をコマンドに送信し、rmそれらを削除します。-r出力がパイプされていない場合は実行をスキップしますrmが、GNU 拡張機能としてリストされています。

上記のスクリプトはニーズに対してかなり堅牢ですが、ディレクトリに非常に多くのファイルがあり、1 つのコマンド ラインに収まらない場合は失敗する可能性があり、一致するファイル名に改行が含まれていると問題が発生する可能性があります。

于 2013-07-24T23:19:51.433 に答える