在條件內搜尋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了解更多。

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

    此處,{}替換為處理時每個文件的名稱。也可以看看man mv有關該命令的資訊。

  2. 或者,將整個find命令用反引號括起來,並將其作為第一個參數傳遞給mv

    MV`找到。 -名稱“*.exe”\(-size +200k -o -size -120k \)` ./myFolder
  3. find您也可以透過將命令的輸出透過管道傳遞到以下方式來完成相同的操作xargs

    尋找 。 -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)"

    有關更多信息,請參閱文檔forfilesif命令。

    要移動文件,請替換echo @pathmove @path C:\destination\folder.

  3. 或者,Powershell 提供了更簡潔的語法:

    取得子項-遞歸| Where-Object { $_.Extension -eq ".exe" -and ( $_.Length -gt 204800 -or $_.Length -lt 122880 ) }

    有關更多信息,請參閱有關的文檔取得子項目地點對象cmdlet。請注意,檔案大小以位元組為單位(204800 B = 200 kB,122880 B = 120 kB)。

    要移動文件,請將上述輸出透過管道傳輸到移動項目cmdlet。

  4. 最後,如果您有 Cygwin 或其他一些可用的 Unix 相容 shell(我假設您有,來自“bash”標籤),您還可以使用以下命令find

    尋找 。 -name "*.exe" \( -size +200k -o -size -120k \)

    有關更多信息,請參閱man find

    若要移動文件,請使用-exec參數。

至於問題的第二部分,也許您可以詳細說明您想要透過執行「executable.exe」來實現的目標,以及它與尋找和移動其他 .exe 檔案的關係。

答案2

下面的 Bash 程式碼應該要移動檔案。我不知道你說的是什麼意思“在此資料夾中無限執行檔“executable.exe”」。您也許可以使用 Cygwin 的/proc檔案系統來檢查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 KB 和 120 KB。您可以自行計算(例如,200 * 1024 和 120 * 1024)以獲得準確的位元組數。

相關內容