我想以随机顺序将许多文件从一个目录移动到几个目录dst/f0..dst/f9
我试着这样做:

ls src/*.xml | head |  xargs -I {} mv {}  f$(($RANDOM % 10))

但所有文件都被移到一个目录src/fN
我该怎么做?谢谢

最佳答案

按照你写的方式,$RANDOM只执行一次。最好每次都生成一个调用它的循环:

for file in src/*.xml
do
    mv "$file" "f$((RANDOM % 10))"
done

这样还可以避免解析ls的输出,这是a bit dangerous的内容。
为了加快速度,您可以使用awk。如果您有GNU awk,例如:
awk -v seed=$RANDOM 'BEGIN{srand(seed)} FNR==1{printf "mv \"%s\" dst/f%d\n", FILENAME, int(rand()*10); nextfile}' *

这将使用srand(),如Random numbers generation with awk in BASH shellnextfile中所述。
这将编写一个包含mv file dir/表达式的文件,每行一个。然后,执行它。

关于bash - 将文件以随机顺序移动到几个目录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31454363/

10-10 17:38