누군가 나에게 이것에 대해 농담을 하는 방법을 말해 줄 만큼 친절할까요? 아니면 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