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 find
Befehls:
find . -name "*.exe" \( -size +200k -o -size -120k \)
Um alle passenden Dateien in ein anderes Verzeichnis zu verschieben, haben Sie mehrere Möglichkeiten.
Verwenden Sie das
-exec
Argument, das (wie der Name schon sagt) es Ihnen ermöglicht, für jede übereinstimmende Datei einen bestimmten Befehl auszuführen. Sieheman find
fü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 mv
für Informationen zu diesem Befehl.Alternativ können Sie den gesamten
find
Befehl in Backticks einschließen und als erstes Argument an Folgendes übergebenmv
:mv `find . -name "*.exe" \( -size +200k -o -size -120k \)` ./meinOrdner
Sie können dasselbe auch erreichen, indem Sie die Ausgabe des
find
Befehls an Folgendes weiterleitenxargs
:find . -name "*.exe" \( -size +200k -o -size -120k \) | xargs -i mv {} ./meinOrdner
Auch hier {}
wird durch den aktuellen Dateinamen ersetzt. Sieheman xargs
fü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.
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.
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 zum
forfiles
Undif
Befehle.Um die Dateien zu verschieben, ersetzen Sie sie
echo @path
durchmove @path C:\destination\folder
.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.
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
find
Befehl verwenden:finde . -name "*.exe" \( -size +200k -o -size -120k \)
Weitere Informationen finden Sie unter
man 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 /proc
Dateisystem 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.