Bash 反转文件名中的数字
所以,在尝试创建更具可读性的文件结构时,我似乎犯了一个错误。我不小心按错误的顺序命名了文件,现在我需要更正它 这些文件的名称为:Bash 反转文件名中的数字,bash,Bash,所以,在尝试创建更具可读性的文件结构时,我似乎犯了一个错误。我不小心按错误的顺序命名了文件,现在我需要更正它 这些文件的名称为: 001-文件号1.jpg 001-文件号2.mp3 002-文件号3.jpg 002-文件号4.mp3 003-文件号5.jpg 003-文件号6.mp3 我认为一个文件夹中有800个文件,另一个文件夹中有300个,这有点乱 正确的顺序应该是: 003-文件号1.jpg 003-文件号2.mp3 002-文件号3.jpg 002-文件号4.mp3 001-文件号
001-文件号1.jpg
001-文件号2.mp3
002-文件号3.jpg
002-文件号4.mp3
003-文件号5.jpg
003-文件号6.mp3
003-文件号1.jpg
003-文件号2.mp3
002-文件号3.jpg
002-文件号4.mp3
001-文件号5.jpg
001-文件号6.mp3
如何重命名所有文件,并更改编号,使其顺序相反?在
排序中使用param-r
→ <代码>排序-r文件
在排序中使用参数-r
→ <代码>排序-r文件
如果要按照区域设置的排序顺序执行反转:
name=(*.{jpg,mp3})
pfix=("${name[@]%% *}")
for ((i=0,j=${#name[@]}-1; j>=0; i++,j--)); do
echo mv "${name[i]}" "${pfix[j]} ${name[i]#* }"
done
用文件名填充一个数组,用前缀填充另一个数组;在两个相反的方向上循环,并以相反的顺序重新配对
如果echo的输出看起来不错,则删除它。可能会抱怨目标和源只有一次是相同的,但这不会造成任何伤害。如果要按照区域设置的排序顺序执行反转:
name=(*.{jpg,mp3})
pfix=("${name[@]%% *}")
for ((i=0,j=${#name[@]}-1; j>=0; i++,j--)); do
echo mv "${name[i]}" "${pfix[j]} ${name[i]#* }"
done
用文件名填充一个数组,用前缀填充另一个数组;在两个相反的方向上循环,并以相反的顺序重新配对
如果echo的输出看起来不错,则删除它。可能会抱怨目标和源只有一次是相同的,但这不会造成任何伤害。不确定这会在大量文件上扩展到多大程度,但就是这样
#!/usr/bin/env bash
shopt -s extglob nullglob
file=(*.@(mp3|jpg))
mapfile -t -d '' files < <(printf '%s\0' "${file[@]}")
mapfile -t -d '' renamed < <(paste -zd ' ' <(printf '%s\0' "${files[@]%% *}" | sort -rz ) <(printf '%s\0' "${files[@]#* }"))
for i in "${!files[@]}"; do
echo mv -v "${files[$i]}" "${renamed[$i]}"
done
- 它将抛出一条错误消息,如@oguz发布的内容
只是因为bash4+
mapfile
- 另外,
和粘贴
上的排序
可能仅为-z
GNU
vidir
,则可以使用您喜爱的文本编辑器重命名文件,这是另一个选项。需要注意的是,它不支持带有换行符的文件/路径名
vidir /path/to/files
使用您喜爱的文本编辑器
EDITOR=kate vidir /path/to/files
如果这是您第一次使用
vidir
,那么我建议您先在一些测试文件上试用。第一列只是文件/目录的增量。不要触摸它。不确定这在大量文件上的扩展效果如何,但它在这里
#!/usr/bin/env bash
shopt -s extglob nullglob
file=(*.@(mp3|jpg))
mapfile -t -d '' files < <(printf '%s\0' "${file[@]}")
mapfile -t -d '' renamed < <(paste -zd ' ' <(printf '%s\0' "${files[@]%% *}" | sort -rz ) <(printf '%s\0' "${files[@]#* }"))
for i in "${!files[@]}"; do
echo mv -v "${files[$i]}" "${renamed[$i]}"
done
- 它将抛出一条错误消息,如@oguz发布的内容
只是因为bash4+
mapfile
- 另外,
和粘贴
上的排序
可能仅为-z
GNU
vidir
,则可以使用您喜爱的文本编辑器重命名文件,这是另一个选项。需要注意的是,它不支持带有换行符的文件/路径名
vidir /path/to/files
使用您喜爱的文本编辑器
EDITOR=kate vidir /path/to/files
如果这是您第一次使用vidir
,那么我建议您先在一些测试文件上试用。第一列只是文件/目录的增量,不要触摸它