有人会这么好心地告诉我如何用这个制作一句俏皮话吗?或者也许使用 sed/awk/xargs?还是珀尔?或者只是让它变得更简单
我通过搜索 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
有人能给我指出更好的方法,或者从中写出一句俏皮话吗?我真的很感激,因为我正在学习如何写俏皮话。
答案1
在我看来,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