Bash

嘗試在 Windows 上的 ubuntu 上的 bash 上查找字元串時,輸出文件會爆炸

  • May 10, 2020

我在 Windows 上的 Ubuntu 上使用 Bash 在我的 Windows 系統上執行 linux 命令。它似乎就像 Ubuntu 一樣工作,所以出於所有意圖和目的,我想我在這裡使用 ubuntu。

我正在嘗試使用字元串將目錄/其子目錄中一堆文件中的所有字元串轉儲到單個文件中。

我使用這個執行緒作為指導

唯一的問題是我的結果通常會生成數十 GB 的輸出(在我終止程序之前),這些輸出似乎來自一遍又一遍地複制相同文件的無限循環。

這是我嘗試過的:

> strings -e S ./* > all.bin.jp.txt 
> strings -e S ./** > all.bin.jp.txt
> find . -type f -exec strings -e S {} \; >> all.jp.txt 
> find ./* -type f -exec strings -e S {} \; >> all.jp.txt 
> find . -type f -exec strings -e S {} \; > all.jp.txt 
> for file in ./*; do strings -e S "$file" >> all.bin.txt; done 
> for file in ./**; do strings -e S "$file" >> all.bin.txt; done 
> for file in ./*/*; do strings -e S "$file" >> all.bin.txt; done

我不記得是哪個命令執行的,但我認為最後一個命令實際上完成並給了我一個幾 GB 的文件,即使它在 Notepad++ 中很容易打開。但我注意到該文件的 70% 是同一行一遍又一遍地重複。

我已經在要從中獲取所有文件以及子目錄中的所有文件的目錄中執行了這些命令。例如,

Parent Directory
--Directory of Interest
---file1
---file2
---subdirectory1
------fileA1
------fileA2
---subdirectory2
------fileB1

因此,從父目錄中,我鍵入 cd Directory of Interest,然後執行命令,我希望將 file1、file2、fileA1、fileA2 和 fileB1 中的所有內容轉儲到同一級別的 Directory of Interest 中的單個文件中作為文件1和文件2。

我也對在什麼級別執行命令感到困惑。我實際上並不關心我在哪裡執行命令,或者文件是否直接放在父目錄中——這正是我嘗試過的。我通常不會在目前目錄中的所有文件上執行字元串時遇到問題,在目錄中使用如下命令以及所有感興趣的文件,但是這個子目錄的事情讓我很難過。

strings -e S . > all.bin.jp.txt
strings -e S *.bin > all.bin.jp.txt

請幫我!我記得我以前嘗試過它時曾經工作過,但我不記得我使用的確切命令。我已經在幾個不同的目錄上嘗試過它,這些目錄的文件類型與我之前使用過這個命令的文件類型相同,但它對它們中的任何一個都不起作用,所以我不知道出了什麼問題。

find命令工作正常,您只需all.jp.txt要從要查找的文件列表中排除或將輸出重定向到不同的目錄,即不是.或它的子目錄之一。否則strings也會繼續執行all.jp.txt並不斷增長。

find . -type f ! -path ./all.jp.txt -exec strings -e S {} \; > all.jp.txt

或者

find . -type f -exec strings -e S {} \; > /some/other/dir/all.jp.txt

引用自:https://unix.stackexchange.com/questions/585759