Juk*_*aav 5 bash shell-script macos
我曾经用Hazel做这个。我想一切从运动~/Downloads/到~/Downloads/Archive/Pictures,~/Downloads/Archive/Documents,~/Downloads/Archive/Videos等基于文件扩展名,当具有相同名称的文件已经存在,榛只会追加一个数字,它是移动文件。
我想编写一个可以实现此目的的 shell 脚本,但我很快意识到我不知道如何在没有任何用户输入的情况下重命名文件。重命名方案可以是文件名后的一个简单计数器,它应该只在mv覆盖现有文件时发生。如果已经有许多具有相同文件名的实例,它也应该能够继续计数器。所以,如果我移动dirA/file.ext到dirB/一个已经file.ext和file2.ext它的脚本应该在3开始计数,并重新命名dirA/file.ext到dirB/file3.ext。
任何人都可以就如何实现这一目标提供任何指导吗?最好使用 shell 脚本,如果没有,则使用 Ruby、Perl 或 Python。只是知道这是否可以用 shell 脚本来帮助我。
这并不难。如果目标文件存在,您只需要将文件分解为基本名称和扩展名,并增加一个计数器,直到目标目录中不存在新文件名。
source=dirA/file.ext
dest_dir=dirB
file=$(basename file.ext)
basename=${file%.*}
ext=${file##*.}
if [[ ! -e "$dest_dir/$basename.$ext" ]]; then
# file does not exist in the destination directory
mv "$source" "$dest_dir"
else
num=2
while [[ -e "$dest_dir/$basename$num.$ext" ]]; do
(( num++ ))
done
mv "$source" "$dest_dir/$basename$num.$ext"
fi
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9678 次 |
| 最近记录: |