2016-03-07 62 views
1

我想從根目錄下的所有文件RECURSIVELLY填充隨機字節。 ONLY文件,文件夾是要留給untoutched的Linux填寫的所有文件recursivelly隨機或僞隨機數據

我不希望刪除這些文件,只需用隨機字節

填補他們在我的研究,單個文件填充命令可能是這樣的:

dd if=/dev/random of=target-files bs=1M

,並找到所有文件recursivelly我應該使用:

find . -name "* .*"

我的問題是:

  1. 是否有可能加入這個兩個命令來實現我的目標? (管它們怎麼樣?)

  2. 是否有另一種更簡單的方法來實現相同的結果?

感謝您的幫助;-)

+0

對不起,我在標題中「RANDO」筆誤,正確的應該是Linux的補全文件recursivelly隨機或僞隨機數據 –

+0

當你說** **填充。你想讓他們保持他們的大小,或者打破他們,並使他們相同的大小? – tink

+0

每個文件都必須保留其原始大小。 –

回答

1

您可以嘗試管道查找結果while循環,和DD的/ dev/udrandom到每個文件。

$ find myfolder -type f |while read fd; do dd if=/dev/urandom of=$fd bs=1M count=1;done 

如果你想保留的文件大小,可以做尋找1k擋計數一些計算,並通過在DD ARGS。

$ find myfolder -type f|while read fd; do FSIZ=`stat -c %s $fd`; CNT=`expr $FSIZ/1024`;dd if=/dev/urandom of=$fd bs=1k count=$CNT;done 
+0

謝謝。這種方式幾乎在那裏:-)但它將所有文件調整爲1M。在保留每個文件原始大小的同時可以達到相同的目標嗎? –

+0

@ LinuxLearnerfromS.A。添加邏輯來查找文件大小和dd相同的文件大小。 –

+0

謝謝大家。羅納德潘的消化做到了。 –

0

Find + xargs + dd + wc會這樣做。

find/-type f -print0 | xargs -0 -Ifilename sh -c 'dd if=/dev/urandom of="filename" bs=`wc -c "filename" | cut -d" " -f1` count=1' 

工作原理:

  1. 查找+ xargs的迭代從查找/
  2. -print0開始的所有文件+ -0 xargs的處理邊緣情況下,像空格/報價/連字符在文件名等
  3. 「WC -c」以字節爲單位提供文件的大小,切斷從提取輸出的第一字即以字節爲單位的大小爲
  4. DD填充與大小由WC提供輸出文件+切
  5. -I在xargs的指定文件名
+0

你的答案能夠處理文件名中的空格!非常感謝你們,你們是天才 –

+0

某些文件名很難處理,比如那些帶空格/分號/引號/連字符的文件。 –

+0

如果我需要修改這個命令來處理文件名中的空格來爲所有文件設置一個特定的日期?像** touch -d'2010-01-01 00:00:00'**你可以這麼說國王來告訴我那個命令行嗎?-) –

0

而第三種方法:)

find/-type f -printf "%s\t%p\n" | while read size name ; do dd if=/dev/urandom of="${name}" bs=1c count=${size}; done 

變量可能需要等待很長的時間:}

0

我愛DD(真的:我喜歡它!);但是,在這種情況下,你可以使用切絲,專爲實現這樣的事情。 這是GNU的coreutils包(安裝在[幾乎]所有的Linux系統)的一部分。

find rootdirectory -type f -print0 | xargs --null --max-args=1 shred --force --iterations=4 --random-source=/dev/urandom --verbose