帮助 oneliner - 创建随机文件,重命名为两个字符的文件名,填充随机字符串

帮助 oneliner - 创建随机文件,重命名为两个字符的文件名,填充随机字符串

有人会这么好心地告诉我如何用这个制作一句俏皮话吗?或者也许使用 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

相关内容