所以,我的问题是:如何在文件名中为前缀号添加+1?
目标是重命名多个文件,以便它们可以从中获取:
1_loremipsum_and_stuff_2013.pdf
2_loremipsum_and_stuff_2013.pdf
3_loremipsum_and_stuff_2013.pdf
4_loremipsum_and_stuff_2013.pdf
13_loremipsum_and_stuff_2013.pdf
18_loremipsum_and_stuff_2013.pdf
19_loremipsum_and_stuff_2013.pdf
20_loremipsum_and_stuff_2013.pdf
对此:
2_loremipsum_and_stuff_2013.pdf
3_loremipsum_and_stuff_2013.pdf
4_loremipsum_and_stuff_2013.pdf
5_loremipsum_and_stuff_2013.pdf
14_loremipsum_and_stuff_2013.pdf
19_loremipsum_and_stuff_2013.pdf
20_loremipsum_and_stuff_2013.pdf
21_loremipsum_and_stuff_2013.pdf
我根本不熟悉终端。我找到了examples for removing prefix number。它工作正常,但是当我尝试使用正则表达式替换某些东西时,我无法接近它。
因此,在第一次尝试并且在终端中正确地重新尝试这种情况之后,我认为我会在javascript中试一试。
我能够得到它 working in javascript /[0-9]*(?=_)/
。
所以,我对终端的最佳猜测是这个,除非它不起作用。:
cd {TESTFOLDER}
REGEX=[0-9]*(?=_)
for name in *; do mv -v "$name" "${name/$REGEX/$(( ${name/$REGEX}+1 ))}"; done
答案 0 :(得分:1)
使用BASH字符串操作:
s='1_loremipsum_and_stuff_2013.pdf'
mv "$s" "$((${s%%_*}+1))_${s#*_}"
编辑:根据以下讨论,您可以使用
while read f; do
mv "$f" "$((${f%%_*}+1))_${f#*_}"
done < <(sort -t_ -rnk1,2 <(printf "%s\n" *_*))
答案 1 :(得分:0)
要在bash中执行确切的示例-只需
for f in *.pdf;
do \
echo mv "$f" "$((${f%%_*}+1))_${f#*_}"; # remove echo for real run
done
但是,很多人在整数之间可能会有字母前缀,例如SQL迁移文件。示例:V1__some_awesome_migration.sql
在这种情况下,您将需要在要增加的整数之前修剪前缀。为此,您可以将修剪后的字符串分配给变量,例如:
for f in *.pdf;
do \
prefix="${f:0:1}"
suffix="${f:1}";
echo mv "$f" "$prefix$((${suffix%%_*}+1))_${suffix#*_}"; # remove echo for real run
done