Ajuda com oneliner - cria arquivos aleatórios, renomeia para dois caracteres, preenche com strings aleatórias [closed]

1

Alguém seria tão gentil e me apontaria como fazer um one-liner a partir disso? Ou talvez use sed / awk / xargs? Ou Perl? Ou apenas simplifique

Eu consegui isso pesquisando o stackexchange e editando poucos scripts, mas eu gostaria de ver como torná-lo um profissional.

Estou criando arquivos com texto aleatório. Não sei quantos arquivos serão criados, explique:

< /dev/urandom tr -dc "\t\n [:alnum:]" | dd of=./filemaster bs=100000000 count=1 && split -b 50 -a 10 ./filemaster && rm ./filemaster

Estou listando esses nomes de arquivo no arquivo fnames1.txt:

ls >> fnames1.txt

Estou gerando nomes de arquivos que desejo para outro arquivo - fnames2.txt

list=echo {a..z} ; for c1 in $list ; do for c2 in $list ; do echo $c1$c2.ext; done; done >> fnames2.txt

Eu mesclo esses arquivos em um arquivo com duas colunas:

paste fnames1.txt fnames2.txt | column -s $'\t' -t >> fn.txt

Estou mudando nomes de arquivos de acordo com o arquivo com colunas (erros lá, pois há mais arquivos criados do que nomes de arquivos gerados, como alterar exatamente essa quantidade de nomes de arquivos? - Eu sei que posso ignorar erros com 2 > / dev / null) :

while read -r line; do mv $line; done < fn.txt

Estou movendo arquivos com extensão que preciso para outro diretório:

mkdir files && mv ./*.ext ./files/ && cd files

Eu preciso reescrever esses arquivos, pois o conteúdo precisa ser maior:

for file in *; do < /dev/urandom tr -dc "\t\n [:alnum:]" | head -c1500 > "$file"; done

Alguém poderia me apontar para um caminho melhor, ou fazer um one-liner a partir disso? Eu realmente aprecio isso, porque estou aprendendo a fazer one-liners.

    
por luki 19.10.2017 / 22:57

1 resposta

0

Na minha opinião, oneliner não é adequado aqui. Será grande e não legível, não é conveniente. O roteiro é melhor. Pode ser convertido para a função.

Esse script cria o diretório "files" e coloca todos os arquivos criados nele. O tamanho de cada arquivo é o mesmo, mas pode ser alterado, se necessário. Arquivos nomeados como: aa.ext ab.ext ac.ext , etc.

Uso: ./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
    
por 20.10.2017 / 02:14