shell实现备份用户指定的文件,将文件备份到目录“文件名 backup”中(若目录不存在则自动建立),备份文件的文件名格式为“文件名 _bak_年月日_时分秒”
时间: 2023-06-08 07:06:55 浏览: 157
好的,根据您的要求,可以使用以下 shell脚本实现:
#!/bin/bash
# 获取用户指定的文件名
echo "请输入要备份的文件名:"
read filename
# 确保文件存在
if [ ! -f "$filename" ]; then
echo "文件不存在!"
exit 1
fi
# 获取当前时间
timestamp=$(date "+%Y%m%d_%H%M%S")
# 构建备份文件名
backup_dir="${filename%.*}_backup"
backup_filename="${filename%.*}_bak_${timestamp}.${filename##*.}"
# 创建备份目录
mkdir -p "$backup_dir"
# 备份文件
cp "$filename" "$backup_dir/$backup_filename"
echo "备份完成!备份文件路径为:$backup_dir/$backup_filename"
相关问题
shell脚本实现文件备份,备份用户指定的文件,将文件备份到目录“文件名 backup”中(若目录不存在则自动建立),备份文件的文件名格式为“文件名 _bak_年月日_时分秒”
好的,可以为您提供一个简单的shell脚本实现:
#!/bin/bash
#获取要备份的文件名
read -p "请输入要备份的文件名: " filename
#检查文件是否存在
if [ -e "$filename" ]; then
#创建备份目录
mkdir -p "${filename}_backup"
#备份文件
cp "$filename" "${filename}_backup/${filename}_bak_$(date +%Y%m%d_%H%M%S)"
echo "备份成功!"
else
echo "文件不存在,请重新输入!"
fi
这个脚本会要求用户输入要备份的文件名,然后检查该文件是否存在。如果存在,就创建一个以“文件名_backup”为名的目录,并将文件备份到该目录下,备份文件名的格式为“文件名_bak_年月日_时分秒”。如果文件不存在,则提示用户重新输入。
Linux shell编程,备份用户指定的文件,将文件备份到目录“文件名_backup”中(若目录不存在则自动建立),备份文件的文件名格式为“文件名_bak_年月日_时分秒”
好的,这个问题的处理方式如下:
1. 获取用户指定的文件名
2. 判断目录是否存在,若不存在则创建目录
3. 获取当前时间,格式化为“年月日_时分秒”的形式
4. 组合出备份文件的文件名(格式为“文件名_bak_年月日_时分秒”)
5. 将原始文件拷贝到目录下备份文件的文件名中
下面是Shell脚本的代码:
``` shell
#!/bin/sh
# 获取用户指定的文件名
filename=$1
# 判断文件是否存在
if [ ! -f "$filename" ]; then
echo "指定的文件不存在,请重新输入。"
exit 1
fi
# 获取目录名和文件名
dirname=$(dirname "$filename")
basename=$(basename "$filename")
# 组合出备份文件的文件名(格式为“文件名_bak_年月日_时分秒”)
backup_time=$(date "+%Y%m%d_%H%M%S")
backup_filename="${basename%.*}_bak_${backup_time}.${basename##*.}"
# 确认备份目录是否存在,不存在则创建
backup_dir="$dirname/${basename%.*}_backup"
if [ ! -d "$backup_dir" ]; then
mkdir "$backup_dir"
echo "备份目录 $backup_dir 已经创建。"
fi
# 将原文件拷贝到备份目录下
cp "$filename" "$backup_dir/$backup_filename"
if [ $? -eq 0 ]; then
echo "$filename 已经成功备份到 $backup_dir/$backup_filename 。"
else
echo "无法备份文件 $filename 。"
exit 1
fi
```
你可以尝试运行一下来测试一下:输入指定的文件名,程序将自动备份到指定的目录下。
注意:为了避免重名文件的问题,备份文件的文件名中附带了毫秒级的时间戳。如果你的系统不支持毫秒级别的时间戳,可能会出现命名冲突。这种情况下,你可以考虑使用其他方式来避免命名冲突。
阅读全文