我怎样才能停止我的脚本来覆盖现有文件
How can I stop my script to overwrite existing files
我学习 bash 从 6 天开始,我认为我掌握了一些基础知识。
总之,对于从Variety下载的壁纸,我写了两个脚本。其中一个将下载的超过 12 天的照片移动到一个文件夹并将它们全部重命名为“Aday 1,2,3 ...”,另一个让我 select 这些并将它们移动到另一个文件夹并删除我的照片没有 select。第一个脚本按我的预期工作,我的问题是关于另一个
我想我应该写下脚本以更好地解释我的问题
脚本:
#!/bin/bash
#Move victors of 'Seçme-Eleme' to 'Kazananlar'
cd /home/eurydice/Bulunur\ Bir\ Şeyler/Dosyamsılar/Seçme-Eleme
echo "Select victors"
read vct
for i in $vct; do
mv -i "Aday $i.png" /home/eurydice/"Bulunur Bir Şeyler"/Dosyamsılar/Kazananlar/"Bahar $RANDOM.png" ;
mv -i "Aday $i.jpg" /home/eurydice/"Bulunur Bir Şeyler"/Dosyamsılar/Kazananlar/"Bahar $RANDOM.jpg" ;
done
#Now let's remove the rest
rm /home/eurydice/Bulunur\ Bir\ Şeyler/Dosyamsılar/Seçme-Eleme/*
在这个脚本中,我最初打算定义另一个变量(我们称之为“n”),所以我从第一个脚本复制和更改变量。是这样的
for i in $vct; do
n=1
mv "Aday $i.png" /home/eurydice/"Bulunur Bir Şeyler"/Dosyamsılar/Kazananlar/"Bahar $n.png" ;
mv "Aday $i.jpg" /home/eurydice/"Bulunur Bir Şeyler"/Dosyamsılar/Kazananlar/"Bahar $n.jpg" ;
n=$((n+1))
done
当我第一次这样做时,脚本按照我的预期运行。然而,在我的第二次测试中 运行 这个脚本覆盖了已经存在的文件。我的意思是,例如,在第一次 运行 中,我有 5 个文件,其名称为“Bahar 1,2,3,4,5”,第二次我选择了 3 个文件来添加。我希望他们的名字是“Bahar 6,7,8”,但相反,我的脚本使他们成为新的 1,2 和 3。我尝试了很多解决方案,当我无法解决时,我只是给他们分配了随机数。
有没有办法让这个脚本按我的预期工作?
此命令查找当前目录中文件中最大的文件名数。如果没有找到文件,最大的数字分配给 0.
biggest_number=$(ls -1 | sed -n 's/^[^0-9]*\([0-9]\+\)\(\.[a-zA-Z]\+\)\?$//p' | sort -r -g | head -n 1)
[[ ! -z "$biggest_number" ]] || biggest_number=0
sed
命令中的正则表达式假定文件名中用于递增的尾随数字之前没有数字。
一旦找到最大的数字,就可以用它开始循环以防止覆盖。
n=$((biggest_number+1))
我学习 bash 从 6 天开始,我认为我掌握了一些基础知识。
总之,对于从Variety下载的壁纸,我写了两个脚本。其中一个将下载的超过 12 天的照片移动到一个文件夹并将它们全部重命名为“Aday 1,2,3 ...”,另一个让我 select 这些并将它们移动到另一个文件夹并删除我的照片没有 select。第一个脚本按我的预期工作,我的问题是关于另一个
我想我应该写下脚本以更好地解释我的问题
脚本:
#!/bin/bash
#Move victors of 'Seçme-Eleme' to 'Kazananlar'
cd /home/eurydice/Bulunur\ Bir\ Şeyler/Dosyamsılar/Seçme-Eleme
echo "Select victors"
read vct
for i in $vct; do
mv -i "Aday $i.png" /home/eurydice/"Bulunur Bir Şeyler"/Dosyamsılar/Kazananlar/"Bahar $RANDOM.png" ;
mv -i "Aday $i.jpg" /home/eurydice/"Bulunur Bir Şeyler"/Dosyamsılar/Kazananlar/"Bahar $RANDOM.jpg" ;
done
#Now let's remove the rest
rm /home/eurydice/Bulunur\ Bir\ Şeyler/Dosyamsılar/Seçme-Eleme/*
在这个脚本中,我最初打算定义另一个变量(我们称之为“n”),所以我从第一个脚本复制和更改变量。是这样的
for i in $vct; do
n=1
mv "Aday $i.png" /home/eurydice/"Bulunur Bir Şeyler"/Dosyamsılar/Kazananlar/"Bahar $n.png" ;
mv "Aday $i.jpg" /home/eurydice/"Bulunur Bir Şeyler"/Dosyamsılar/Kazananlar/"Bahar $n.jpg" ;
n=$((n+1))
done
当我第一次这样做时,脚本按照我的预期运行。然而,在我的第二次测试中 运行 这个脚本覆盖了已经存在的文件。我的意思是,例如,在第一次 运行 中,我有 5 个文件,其名称为“Bahar 1,2,3,4,5”,第二次我选择了 3 个文件来添加。我希望他们的名字是“Bahar 6,7,8”,但相反,我的脚本使他们成为新的 1,2 和 3。我尝试了很多解决方案,当我无法解决时,我只是给他们分配了随机数。
有没有办法让这个脚本按我的预期工作?
此命令查找当前目录中文件中最大的文件名数。如果没有找到文件,最大的数字分配给 0.
biggest_number=$(ls -1 | sed -n 's/^[^0-9]*\([0-9]\+\)\(\.[a-zA-Z]\+\)\?$//p' | sort -r -g | head -n 1)
[[ ! -z "$biggest_number" ]] || biggest_number=0
sed
命令中的正则表达式假定文件名中用于递增的尾随数字之前没有数字。
一旦找到最大的数字,就可以用它开始循环以防止覆盖。
n=$((biggest_number+1))