条件内でexeファイルを検索する

条件内でexeファイルを検索する

現在のフォルダーとそのサブフォルダーにある、200 KB より大きいか 120 KB より小さいすべての .exe ファイルを検索します。次に、それらを「folder」という別のフォルダーに移動し、このフォルダーで「executable.exe」というファイルを無限に実行し、そのメモリ消費量に関する情報を表示します。

何か案は?

私はLinux Mintを使用しています。findコマンドを使用して「.exe」ファイルを検索しました。インドレックの答え

find . -name "*.exe" \( -size +200k -o -size -120k \)

今私がやりたいのは、それらのファイルを「myFolder」という別のフォルダに移動し、その後、このフォルダ内の「MyExec.exe」というファイルを実行することです。

答え1

更新: Linux を使用していると指定したため、次のコマンドを除いて、最初に説明したオプションのほとんどは無関係ですfind

find . -name "*.exe" \( -size +200k -o -size -120k \)

一致するすべてのファイルを別のディレクトリに移動するには、いくつかのオプションがあります。

  1. 引数を使用すると-exec、(名前が示すように)一致したファイルごとに指定されたコマンドを実行できます。man find詳細については。

    find . -name "*.exe" \( -size +200k -o -size -120k \) -exec mv {} ./myFolder \;

    ここで、は{}処理される各ファイルの名前に置き換えられます。man mvそのコマンドの詳細については、こちらをご覧ください。

  2. あるいは、コマンド全体をfindバッククォートで囲み、それを最初の引数として渡しますmv

    mv `find . -name "*.exe" \( -size +200k -o -size -120k \)` ./myFolder
  3. findコマンドの出力をパイプすることでも同じことを実現できますxargs

    find . -name "*.exe" \( -size +200k -o -size -120k \) | xargs -i mv {} ./myFolder

もう一度、{}現在のファイル名に置き換えられます。man xargs詳細については。

最後に、実行しますMyExec.exe(Wine を使用していると想定しています)。

wine ./myFolder/MyExec.exe

誰かが Windows で同様のことを実行する必要がある場合に備えて、元の回答を以下に保存しておきます。


検索を実行する方法に応じて、いくつかのオプションがあります。

  1. .exe ファイルについて言及されているので、Windows をお使いのものと想定します。最初のオプションは、Windows エクスプローラーの検索ボックスを使用することです。検索を開始するフォルダーに移動し、F3次の検索クエリを入力します。

    *.exe (サイズ:<120kB または サイズ:>200kB)

    詳細については、Windows での検索に関する高度なヒント

    ファイルを移動するには、ファイルを選択して、対象のフォルダーにドラッグ アンド ドロップ (または切り取って貼り付け) するだけです。

  2. コマンドラインからこれを実行したい場合(たとえば、プロセスを自動化する必要がある場合):

    forfiles /m *.exe /s /c "cmd /c if @fsize GTR 204800 (echo @path) else if @fsize LSS 122880 (echo @path)"

    詳細については、forfilesそしてifコマンド。

    ファイルを移動するには、echo @pathを に置き換えますmove @path C:\destination\folder

  3. あるいは、Powershell ではよりクリーンな構文が提供されます。

    Get-ChildItem -Recurse | Where-Object { $_.Extension -eq ".exe" -and ( $_.Length -gt 204800 -or $_.Length -lt 122880 ) }

    詳細については、取得-子アイテムそして場所オブジェクトコマンドレット。ファイル サイズはバイト単位であることに注意してください (204800 B = 200 kB、122880 B = 120 kB)。

    ファイルを移動するには、上記の出力をアイテムの移動コマンドレット。

  4. 最後に、Cygwin またはその他の Unix 互換シェルが利用可能な場合 (「bash」タグから、すでに利用可能であると想定します)、次のfindコマンドも使用できます。

    find . -name "*.exe" \( -size +200k -o -size -120k \)

    詳細については、man find

    ファイルを移動するには、-exec引数を使用します。

質問の 2 番目の部分については、「executable.exe」を実行することで何を達成しようとしているのか、またそれが他の .exe ファイルの検索と移動にどのように関係しているのかを詳しく説明していただけますか。

答え2

以下のBashコードでファイルを移動します。"の意味がわかりません。このフォルダ内のファイル「executable.exe」を無限に実行する/proc「Cygwin のファイルシステムを使用して、のメモリ使用量を調べることができる場合がありますexecutable.exe

#!/bin/bash
find . -type f |
    while read FILE
    do
        set -- $(/bin/ls -l "$FILE")
        [ "$5" -lt 120000 -o "$5" -gt 200000 ] && mv "$FILE" folder
    done
echo "Files copied!"
if cd folder
then
    sh toto.sh
else
    echo "Failed to cd into folder!" >&2
fi

ちなみに、私の数字は正確には 200 キロバイトと 120 キロバイトではありません。正確なバイト数を取得するには、自由に自分で計算してください (例: 200 * 1024 と 120 * 1024)。

関連情報