使用多组连续数字批量重命名

时间:2014-03-11 10:56:40

标签: bash zsh batch-rename

我有文件夹(在多个目录中),其名称类似于folder1到folder9。使用zsh / zmvbash我想用另一组连续数字重命名这些数字,例如10-18,19-27等。

# Create dummy data

#!/bin/zsh

for (( i=1; i<=9; i++)); do
   mkdir folder$i
done

不确定如何正确...

folders=(*)

# Maybe something like 1:length-of-folders..?

for (( i=1; i<=$#folders; i++)) do
   zmv -n folder$i folder$i+9
done

任何指针都将受到高度赞赏,谢谢!

3 个答案:

答案 0 :(得分:1)

使用bash,你可以这样做:

#!/bin/bash

for i in `seq 1 3`;
do
    mkdir foo$i
done    

for i in `seq 1 3`;
do
    mv foo$i foo$((i + 10))
done

但是如果你有文件夹foo1,...,foo10,你需要将它们移到foo3,...,foo12,然后你需要首先将foo10移至foo12,然后再处理foo9等,以“从尾巴开始”。

答案 1 :(得分:1)

如果您没有传递模式,则调用zmv无效,您也可以直接致电mv

要为每个号码添加9,您可以使用

zmv '(folder)(<->)' '$1$[$2+9]'

但请注意,这取决于不重叠的数字范围。

通常,如果要重命名文件以使用连续编号,可以让zsh通过在替换文本中包含$[i++]之类的内容来增加数字。同样,请注意数字范围是否可能重叠。您可以通过重命名为中间模式来避免麻烦。

i=10; zmv '(folder)[0-9]##' '$1$[i++].consecutive'
zmv '(folder<->).consecutive' '$1'

如果需要非默认排序顺序,可以使用glob限定符。例如,按照修改时间的顺序对文件进行编号:

i=1; zmv -Q '(folder)[0-9]##(Om)' '$1-by-date-$[i++]'

答案 2 :(得分:1)

这将重命名当前目录中的每个文件/文件夹。文件夹将重命名为18,19,依此类推。

#!/bin/bash
IFS='
'
cd "dir/that/contains/folders/"
COUNTER=18;
for file in `ls`; do
    mv $file "folder"$COUNTER
    COUNTER=$(expr $COUNTER + 1)
done