我需要生成 100 个 .txt 文件,每个文件内都有一个随机数。然后我需要重命名这些文件,以便根据每个文件中存储的值按升序将文件名从 1.txt 命名为 100.txt。名为 1.txt 的文件应存储最小的数字,名为 100.txt 的文件应存储最大的数字
我尝试了这个代码:
#!/bin/bash
for i in $(seq 1 100)
do
echo $RANDOM > ${i}.txt
done
cat *.txt | sort
答案1
创建一个新目录,并将该目录命名为您选择的任意名称。将目录更改为cd
您创建的新目录,这样 shell 脚本创建的所有文件都将在新目录中创建,并且只有这些新创建的文件会被重命名。然后运行以下 shell 脚本。
#!/bin/bash
for i in $(seq 1 100)
do
echo $RANDOM > ${i}.txt # Put a random number inside each file.
mv ${i}.txt $(head -1 ${i}.txt).txt # Rename the files.
done
ls *.txt | sort -n # Sort the files in ascending order.
您的问题含糊不清,因为我也可以按升序重命名文件,新名称范围从 1.txt 到 100.txt。如果您希望文件重命名的方式是那样,请使用此 shell 脚本。
#!/bin/bash
for i in $(seq 1 100)
do
echo $RANDOM > ${i}.txt # put a random number inside each file
mv ${i}.txt $(head -1 ${i}.txt).txt # rename files
done
# ls *.txt | sort -n # I commented out this line and added a new line after it.
i=1; for filename in `ls *.txt | sort -n`; do mv "$filename" "$((i++)).txt"; done
答案2
您可以先生成所有随机数,然后对它们进行排序,然后再将它们写入文件:
for i in {1..100}; do
echo $RANDOM
done \
| sort -n \
| while read n; do
(( x+=1 ))
echo "$n" > "$x.txt"
done
或者与单行相同:
for i in {1..100}; do echo $RANDOM; done | sort -n | while read n; do (( x+=1 )); echo "$n" > "$x.txt"; done
还要注意,要按sort
数字顺序对数字字符串进行排序,您需要它的--numeric-sort
(或-n
)选项。