在下载图片时各个网站命名不统一,管理起来很麻烦,想要写一个脚本将下载的图片或者其他资源实现格式统一,方便管理
$0:表示脚本路径。运行 ./myscript.sh,$0 将会保存 ./myscript.sh。
$1:表示传递给脚本的第一个参数。命令是 ./myscript.sh arg1 arg2,那么 $1 将会是 arg1,$2 将会是 arg2。
$@:表示所有的参数,适合需要遍历所有传递给脚本的参数的场景。
$#:表示传递给脚本的参数个数。
$? 是一个特殊变量,用于获取上一个执行命令的退出状态码。这个状态码可以用来判断命令是否成功执行。0 表示命令成功执行。非 0 值表示命令发生了错误
脚本: 将文件命名为现在时间+原后缀
#!/bin/bash
# 检查是否提供了文件名作为参数
if [ "$#" -ne 1 ]; thenecho "need: $0 [filename]"exit 1
fi
# 读取文件名参数
filename=$1
# 检查文件是否存在
if [ ! -f "$filename" ]; thenecho "Error: File '$filename' does not exist."exit 1
fi
# 获取文件后缀
extension="${filename##*.}"
# 获取当前时间并格式化
timestamp=$(date +%Y%m%d_%H%M%S)
# 构造新的文件名
newfilename="${timestamp}.${extension}"
# 重命名文件
mv "$filename" "$newfilename"
# 检查是否重命名成功
if [ $? -eq 0 ]; thenecho "File renamed to '$newfilename'"
elseecho "Error: Failed to rename file."exit 1
fi
与wget结合,接收资源链接,下载文件并重命名。
将重命名后的文件放入对应名称的文件夹
#!/bin/bash
# 检查是否提供了下载链接作为参数
if [ "$#" -ne 1 ]; thenecho "Usage: $0 <download_url>"exit 1
fi
# 读取下载链接参数
download_url=$1
# 使用wget下载文件
wget "$download_url" -O downloaded_file
# 检查下载是否成功
if [ $? -ne 0 ]; thenecho "Error: Download failed."exit 1
fi
# 获取文件后缀(去除.)
extension="${download_url##*.}"
# 获取当前时间并格式化
timestamp=$(date +%Y%m%d_%H%M%S)
# 构造新的文件名
new_file_name="${timestamp}.${extension}"
# 重命名文件
mv "downloaded_file" "$new_file_name"
# 检查是否重命名成功
if [ $? -eq 0 ]; thenecho "File downloaded and renamed to '$new_file_name'"
elseecho "Error: Failed to rename the downloaded file."exit 1
fi
# 根据后缀找到或创建文件夹
folder_name="${extension}"
if [ -d "$folder_name" ]; then# 文件夹存在,将文件移动到文件夹中mv "$new_file_name" "$folder_name/"
else# 文件夹不存在,创建文件夹并将文件移动到文件夹中mkdir "$folder_name"mv "$new_file_name" "$folder_name/"
fi
# 检查文件是否成功移动到文件夹中
if [ $? -eq 0 ]; thenecho "File moved to folder '$folder_name'"
elseecho "Error: Failed to move the file to the folder '$folder_name'"exit 1
fi
如果使用mv命令往文件夹内放相同名字文件后者会把前者覆盖掉,这意味着同一秒下载的多个文件只会留下一个?
- 把时间精度设到毫秒级,大大降低重复可能,
- 在mv移动之前加一个判断,如果目标文件已经存在,就计数器加一做区分,
- 下载失败时,把down_file删除掉
- 同时接受多个下载链接
#!/bin/bash
# 检查是否提供了下载链接作为参数
if [ "$#" -eq 0 ]; thenecho "Usage: $0 <download_url_1> <download_url_2> ..."exit 1
fi
# 遍历所有提供的下载链接
for download_url in "$@"; do# 使用wget下载文件, 临时文件名 downloaded_filewget "$download_url" -O downloaded_file# 检查下载是否成功if [ $? -ne 0 ]; thenecho "Download failed for $download_url."rm -f downloaded_file # 在失败时删除临时文件continue # 跳过到下一个链接fi# 获取文件后缀(去除.)extension="${download_url##*.}"# 获取当前时间并格式化timestamp=$(date +%Y%m%d_%H%M%S_%3N)# 构造新的文件名new_file_name="${timestamp}.${extension}"# 重命名文件mv "downloaded_file" "$new_file_name"# 检查是否重命名成功if [ $? -eq 0 ]; thenecho "Renamed to '$new_file_name' for $download_url"elseecho "Error renaming file for $download_url"continuefi# 根据后缀找到或创建文件夹路径folder_name="${extension}"counter=1# 检查文件名是否存在while [ -e "${folder_name}/$new_file_name" ]; donew_file_name="${timestamp}_${counter}.${extension}"((counter++))done# 创建文件夹(如果不存在)mkdir -p "$folder_name"# 移动文件到相应的文件夹中mv "$new_file_name" "$folder_name/"# 检查文件是否成功移动到文件夹中if [ $? -eq 0 ]; thenecho "Moved '$new_file_name' to '$folder_name/'"elseecho "Failed to move '$new_file_name' to '$folder_name/'"fi
done