Random 在文件扩展名之前添加随机文本

Random 在文件扩展名之前添加随机文本,random,insert,sed,rename,Random,Insert,Sed,Rename,我有这个字符串: 2013/07./penguin pingouin pinguino 365.png …我想有效地改名为 2013/07./penguin pingouin pinguino 365${RANDOM}.png 我认为sed可能能够从字符串的最后一个字符向内插入4个空格的随机位。我不知道怎么做(如果这是可能的或最好的方法) Background:这是图片排序脚本的一部分,我试图在找到重复的图片时加入重命名功能。扩展名并不总是.png,但它总是三个字符。下面是将文件备份到目录的

我有这个字符串:

2013/07./penguin pingouin pinguino 365.png
…我想有效地改名为

2013/07./penguin pingouin pinguino 365${RANDOM}.png
我认为sed可能能够从字符串的最后一个字符向内插入4个空格的随机位。我不知道怎么做(如果这是可能的或最好的方法)


Background:这是图片排序脚本的一部分,我试图在找到重复的图片时加入重命名功能。扩展名并不总是
.png
,但它总是三个字符。

下面是将文件备份到目录的另一种方法:

moveto () { 
    file=$1
    if [[ -f "$file" ]]; then 
        echo "no such file: $file"
        return 1
    fi
    dir=$2;
    if [[ -d "$dir" ]]; then
        echo "no such directory: $dir"
        return 1
    fi
    target="$dir/$(basename "$file")"
    if [[ -f "$target" ]]; then
        base=${target%.???}
        ext=${target##*.}
        prev=("$base"_*)
        for ((i=${#prev[@]}-1; i>=0; i--)); do
            if [[ ${prev[i]} =~ "$base"_0*([0-9]+) ]]; then
                n=${BASH_REMATCH[1]}
                mv "${prev[i]}" "$(printf "%s_%03d.%s" "$base" $((n+1)) "$ext")"
            fi
        done
        mv "$target" "$base"_001.$ext
    fi
    mv "$file" "$target"
}
第一次将文件“移动到”目录(
moveto file.txt backups
)时,您会得到“backups/file.txt”
第二次,您将有“backups/file.txt”和“backups/file_001.txt”
第三次,您将有“backups/file.txt”、“backups/file_001.txt”和“backups/file_002.txt”

依此类推。

下面的代码片段应该可以满足您在sed
sed-r/([a-zA-Z]+$)/$RANDOM\1'
中的需要,请尝试以下操作:

for file in *; do 
  ext="${i##*.}"; 
  mv "$file" "${file%.*}${random}.${ext}"; 
done


事实上,我昨天也想到了同样的事情。我会给你答案,因为我不能在八小时内回答我自己的问题。我的是这样的:EXT=
echo$2 | awk-F.{print$NF}'
${2%.*}${RANDOM}.${EXT}
$ random="my random stuff" # 
$ touch "penguin pingouin pinguino 365.png" 
$ ls
penguin pingouin pinguino 365.png
$ for file in *; do 
    ext="${i##*.}"; mv "$file" "${file%.*}${random}.${ext}"; 
  done
$ ls
penguin pingouin pinguino 365my random stuff.png