我有文件夹(在多个目录中),其名称类似于folder1到folder9。使用zsh
/ zmv
或bash
我想用另一组连续数字重命名这些数字,例如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
任何指针都将受到高度赞赏,谢谢!
答案 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