Suche nach EXE-Datei innerhalb einer Bedingung

Suche nach EXE-Datei innerhalb einer Bedingung

Ich möchte im aktuellen Ordner und seinen Unterordnern nach allen .exe-Dateien suchen, die größer als 200 kB oder kleiner als 120 kB sind. Anschließend möchte ich sie in einen anderen Ordner namens „Ordner“ verschieben und in diesem Ordner die Datei namens „executable.exe“ unendlich ausführen und einige Informationen über ihren Speicherverbrauch anzeigen.

Irgendwelche Ideen?

Ich verwende Linux Mint. Ich habe den Befehl find verwendet, um nach ".exe"-Dateien zu suchen, perIndreks Antwort.

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

Jetzt möchte ich diese Datei in einen anderen Ordner namens „myFolder“ verschieben und danach eine beliebige Datei in diesem Ordner namens „MyExec.exe“ ausführen.

Antwort1

Update: Da Sie angegeben haben, dass Sie Linux verwenden, sind die meisten der ursprünglich beschriebenen Optionen irrelevant, mit Ausnahme des findBefehls:

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

Um alle passenden Dateien in ein anderes Verzeichnis zu verschieben, haben Sie mehrere Möglichkeiten.

  1. Verwenden Sie das -execArgument, das (wie der Name schon sagt) es Ihnen ermöglicht, für jede übereinstimmende Datei einen bestimmten Befehl auszuführen. Sieheman findfür mehr Informationen.

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

    Hier {}wird durch den Namen der einzelnen Dateien ersetzt, während sie verarbeitet werden. Siehe auchman mvfür Informationen zu diesem Befehl.

  2. Alternativ können Sie den gesamten findBefehl in Backticks einschließen und als erstes Argument an Folgendes übergeben mv:

    mv `find . -name "*.exe" \( -size +200k -o -size -120k \)` ./meinOrdner
  3. Sie können dasselbe auch erreichen, indem Sie die Ausgabe des findBefehls an Folgendes weiterleiten xargs:

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

Auch hier {}wird durch den aktuellen Dateinamen ersetzt. Sieheman xargsfür mehr Informationen.

Zum Schluss führen Sie Folgendes aus MyExec.exe(ich gehe davon aus, dass Sie hierfür Wine verwenden):

wine ./myFolder/MyExec.exe

Ich werde meine ursprüngliche Antwort unten aufbewahren, falls jemand etwas Ähnliches unter Windows tun muss.


Je nachdem, wie Sie Ihre Suche ausführen möchten, gibt es mehrere Optionen.

  1. Da Sie .exe-Dateien erwähnen, gehe ich davon aus, dass Sie Windows verwenden. Die erste Möglichkeit wäre, das Suchfeld im Windows Explorer zu verwenden. Navigieren Sie einfach zu dem Ordner, in dem Sie Ihre Suche starten möchten, klicken Sie auf F3und geben Sie die folgende Suchanfrage ein:

    *.exe (Größe:<120kB ODER Größe:>200kB)

    Weitere Informationen finden Sie unterErweiterte Tipps zur Suche in Windows.

    Um die Dateien zu verschieben, wählen Sie sie einfach aus und ziehen Sie sie per Drag & Drop (oder Ausschneiden und Einfügen) in den Zielordner.

  2. Wenn Sie dies über die Befehlszeile tun möchten (beispielsweise, wenn der Prozess automatisiert werden muss):

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

    Weitere Informationen finden Sie in der Dokumentation zumforfilesUndifBefehle.

    Um die Dateien zu verschieben, ersetzen Sie sie echo @pathdurch move @path C:\destination\folder.

  3. Alternativ bietet Powershell eine sauberere Syntax:

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

    Weitere Informationen finden Sie in der Dokumentation zumUntergeordnetes Element abrufenUndWhere-ObjektCmdlets. Beachten Sie, dass die Dateigrößen in Bytes angegeben sind (204800 B = 200 kB und 122880 B = 120 kB).

    Um die Dateien zu verschieben, leiten Sie die Ausgabe des obigen Befehls an dieArtikel verschieben-Cmdlet.

  4. Wenn Sie Cygwin oder eine andere Unix-kompatible Shell zur Verfügung haben (was ich aufgrund des Tags „bash“ annehme), können Sie auch den folgenden findBefehl verwenden:

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

    Weitere Informationen finden Sie unterman find.

    Verwenden Sie das Argument, um die Dateien zu verschieben -exec.

Was den zweiten Teil Ihrer Frage betrifft, könnten Sie vielleicht näher erläutern, was Sie mit der Ausführung von „executable.exe“ erreichen möchten und in welchem ​​Zusammenhang dies mit der Suche und dem Verschieben anderer EXE-Dateien steht.

Antwort2

Der folgende Bash-Code sollte die Dateien verschieben. Ich weiß nicht, was Sie mit " meinen.Führen Sie in diesem Ordner die Datei 'executable.exe' unendlich aus". Möglicherweise können Sie das /procDateisystem von Cygwin verwenden, um die Speichernutzung von zu untersuchen 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

Übrigens sind meine Zahlen nicht genau 200 Kilobyte und 120 Kilobyte. Sie können die Berechnung gerne selbst durchführen (z. B. 200 * 1024 und 120 * 1024), um die genaue Bytezahl zu erhalten.

verwandte Informationen