这里我有名为1(1).jpg,1(2).jpg,1(3).jpg .....的图像文件 我想使用.sh文件在Linux中使用Corn Job重命名此文件 括号()中的数字应更改,其他应保持不变
例如
重命名1(1).jpg之前 重命名1(2).jpg后
和之前的1(2).jpg应该重命名为其他任何数字1(x).jpg:x是更改的值,文件数应该相同且不能覆盖
我该怎么做
我只是将它们重命名为
答案 0 :(得分:0)
这并不是真正随机的,但也许足以满足您的需求:
n=1; for i in 1\ \(*.jpg; do : $((n+=$RANDOM%5 + 1 )); echo mv -i "$i" "1 ($n).new.jpg"; done
(首先对echo执行,如果对结果满意,则省略'echo'。然后根据需要重命名,并删除“ .new”。)
答案 1 :(得分:0)
我会这样做:
tmpdir
source
dest
mv "${source[i]}" "$tmpdir/${dest[i]}"
答案 2 :(得分:0)
不是理想的效率。欢迎提出建议。
这仅假设一位数字,效率会下降,因为必须存在一些未使用的数字,但效率会下降,但是它是随机选择而不是缓存不发火。
printf "%s\n" "1 ("?").jpg" |
while IFS=')(' read a b c
do n=$(($RANDOM%10))
while [[ -e "$a($n)$c" ]]
do n=$(($RANDOM%10))
done
mv "$a($b)$c" "$a($n)$c"
done
这会更有效,但不是随机的,而是希望使用最低的可用插槽。
for ndx in {0..9}
do [[ -e "1 ($ndx).jpg" ]] && used[$ndx]=1 || used[$ndx]=0
done
printf "%s\n" "1 ("?").jpg" |
while IFS=')(' read a b c
do for ndx in {0..9}
do if (( used[$ndx] ))
then continue
else mv "$a($b)$c" "$a($ndx)$c"
used[$b]=0
used[$ndx]=1
break
fi
done
done