Shell-Script
幫助 oneliner - 創建隨機文件,重命名為兩個字元的文件名,填充隨機字元串
有人會這麼好心,告訴我如何用這個做一個單線嗎?或者也許使用 sed/awk/xargs?還是 Perl?或者只是讓它更簡單
我通過搜尋 stackexchange 和編輯幾個腳本實現了這一點,但我想看看如何讓它像專業人士一樣。
我正在創建其中包含隨機文本的文件。我不知道會創建多少個文件,請解釋一下:
< /dev/urandom tr -dc "\t\n [:alnum:]" | dd of=./filemaster bs=100000000 count=1 && split -b 50 -a 10 ./filemaster && rm ./filemaster
我將這些文件名列出到文件 fnames1.txt:
ls >> fnames1.txt
我正在為另一個文件生成我想要的文件名 - fnames2.txt
list=echo {a..z} ; for c1 in $list ; do for c2 in $list ; do echo $c1$c2.ext; done; done >> fnames2.txt
我將這些文件合併到一個包含兩列的文件中:
paste fnames1.txt fnames2.txt | column -s $'\t' -t >> fn.txt
我正在根據帶有列的文件更改文件名(錯誤是因為創建的文件多於生成的文件名,如何準確更改此數量的文件名?-我知道我可以忽略 2>/dev/null 的錯誤):
while read -r line; do mv $line; done < fn.txt
我正在將需要副檔名的文件移動到另一個目錄:
mkdir files && mv ./*.ext ./files/ && cd files
我需要重寫這些文件,因為內容需要更大:
for file in *; do < /dev/urandom tr -dc "\t\n [:alnum:]" | head -c1500 > "$file"; done
誰能指出我更好的方法,或者以此為基礎?我真的很感激,因為我正在學習如何做單行。
在我看來,oneliner 不適合這裡。它會很大,不可讀,不方便。劇本更好。它可以轉換為函式。
該腳本創建**“文件”**目錄並將所有創建的文件放在那裡。每個文件的大小相同,但可以根據需要進行更改。文件名為:
aa.ext ab.ext ac.ext
等。用法:
./create_random_files.sh
#!/bin/bash # Number of files file_nums=5 # The size of the each file in bytes file_size=1500 # Creates the "files" directory if it doesn't exist mkdir -p files for i in {a..z}{a..z}; do # gets data from the /dev/urandom file and remove all unneeded characters # from it - all characters except "\t\n [:alnum:]". tr -dc "\t\n [:alnum:]" < /dev/urandom | # The "head" command takes specified amount of bytes and writes them to the # needed file. # The "files/${i}.ext" is the relative path to new files, which named # like "aa.ext" and placed into the "files" directory head -c "$file_size" > "files/${i}.ext" # Iterations counter. It will stop "for" loop, when file_nums # will be equal to zero if !(( --file_nums )); then break fi done