도움말 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를 사용하여 오류를 무시할 수 있다는 것을 알고 있습니다). /없는 ):

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

관련 정보