我有一根绳子:
2013/07./penguin pingouin pinguino 365.png我想要将...that重命名为
2013/07./penguin pingouin pinguino 365${RANDOM}.png我认为sed可能能够从字符串中的最后一个字符向内插入随机位4空格。我不知道怎么做(如果这是可能的,或者是最好的方法)。
背景:--这是图片排序脚本的一部分,当它找到副本时,我会尝试合并重命名功能。扩展并不总是.png,但它将始终是三个字符。
发布于 2013-07-15 20:45:39
试一试如下:
for file in *; do
ext="${i##*.}";
mv "$file" "${file%.*}${random}.${ext}";
done
$ 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发布于 2013-07-15 19:18:48
下面是将文件备份到目录中的另一种方法:
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"
}当您第一次将文件“移动”到dir (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“。
诸若此类。
发布于 2013-07-15 19:30:27
下面的代码段应该在sed sed -r 's/(.[a-zA-Z]+$)/$RANDOM\1'中执行您所需的操作
https://stackoverflow.com/questions/17661283
复制相似问题