虚拟机VMware||脚本

本文章仅供了解什么是脚本,一个简单的示例,知道大概的执行流程

脚本需求

给某个文件夹中的每一个文件夹都压缩成zip文件,同时命名按照文件夹的最后一个‘_’的数字来命名,将压缩好的文件全放入指定的文件夹下。

脚本代码

#!/bin/bash

# 定义源目录和目标目录
SOURCE_DIR="/path/to/source_directory"  # 修改为实际的源目录路径
DEST_DIR="/path/to/destination_directory"  # 修改为实际的目标目录路径

# 确保目标目录存在
mkdir -p "$DEST_DIR"

# 遍历源目录中的每个子文件夹
for dir in "$SOURCE_DIR"/*/; do
    # 获取文件夹名称(不包括路径)
    folder_name=$(basename "$dir")

    # 获取文件夹名称最后一个 '_' 后面的数字
    number=$(echo "$folder_name" | awk -F'_' '{print $NF}')

    # 定义压缩文件的目标路径和名称
    zip_name="$DEST_DIR/$number.zip"

    # 压缩文件夹并命名为数字.zip
    zip -r "$zip_name" "$dir"

    echo "已压缩 $folder_name 为 $zip_name"
done

echo "所有文件夹均已压缩完毕并保存至 $DEST_DIR。"

详细解释

  1. #!/bin/bash:

    • 这是Shebang,用来指定解释器。这一行告诉系统,这个脚本应该用 /bin/bash 来执行,即使用 Bash 解释器。
  2. SOURCE_DIR="/path/to/source_directory"DEST_DIR="/path/to/destination_directory":

    • 这里定义了两个变量,SOURCE_DIRDEST_DIR,分别代表源目录和目标目录。
    • 变量: 在 Bash 脚本中,变量通常用大写字母命名。变量的值是用等号 = 来赋予的,等号两侧不能有空格。
    • 双引号 ": 用来包裹变量的值,以确保变量值中的特殊字符(如空格)不会被解释器误解。
  3. mkdir -p "$DEST_DIR":

    • 这个命令用于创建目标目录 DEST_DIR
    • mkdir: 创建目录的命令。
    • -p: 如果目标目录不存在,-p 参数会创建该目录及其父目录。如果目录已存在,不会报错。
    • $DEST_DIR: 使用 $ 符号来引用变量的值。$DEST_DIR 表示我们在脚本前面定义的目标目录路径。
  4. for dir in "$SOURCE_DIR"/*/; do:

    • 这是一个 for 循环,用于遍历源目录中的每个子文件夹。
    • for ... in ...; do ... done: for 循环的结构。它遍历指定的列表,对每个项目执行 dodone 之间的命令。
    • "$SOURCE_DIR"/*/: 这个模式匹配路径中的所有子文件夹。* 是通配符,匹配所有内容。/ 在结尾表示只匹配目录。
    • dir: 每次循环时,dir 都会被赋值为当前匹配到的子文件夹路径。
  5. folder_name=$(basename "$dir"):

    • 获取当前子文件夹的名称(不包括路径)。
    • basename: 这个命令从给定的路径中提取最后一部分,即文件或目录名。
    • $(...): 命令替换,将命令的输出赋值给变量。这里是将 basename "$dir" 的输出赋值给 folder_name
  6. number=$(echo "$folder_name" | awk -F'_' '{print $NF}'):

    • folder_name 中提取最后一个 '_' 后的部分。
    • echo "$folder_name": 输出 folder_name 的值。
    • |: 管道符,用于将前一个命令的输出作为下一个命令的输入。
    • awk -F'_' '{print $NF}':
      • awk 是一个强大的文本处理工具。
      • -F'_': 指定 awk 的字段分隔符为 '_'
      • {print $NF}: NFawk 中的一个内置变量,表示字段的总数。$NF 表示最后一个字段。因此,这个命令会输出最后一个 '_' 后面的部分。
  7. zip_name="$DEST_DIR/$number.zip":

    • 定义压缩文件的目标路径和名称。
    • "$DEST_DIR/$number.zip": 将 number 变量的值与目标目录路径拼接起来,作为压缩文件的名称。
  8. zip -r "$zip_name" "$dir":

    • 将当前子文件夹压缩为 .zip 文件。
    • zip: 压缩文件的命令。
    • -r: 递归地压缩目录及其所有子目录和文件。
    • "$zip_name": 压缩后的 .zip 文件的路径和名称。
    • "$dir": 要压缩的子文件夹路径。
  9. echo "已压缩 $folder_name 为 $zip_name":

    • 输出一条消息,表示当前子文件夹已被压缩。
    • echo: 输出命令,用于显示消息。
    • "...": 双引号中的内容会被原样输出,其中的变量会被替换为它们的值。
  10. done:

    • 结束 for 循环。
  11. echo "所有文件夹均已压缩完毕并保存至 $DEST_DIR。":

    • 脚本执行完成后,输出最终的状态消息。

符号解释

  • $: 用于引用变量的值。
  • ": 双引号用于包裹字符串,保护字符串中的空格和特殊字符。
  • `...`$(...): 命令替换,运行其中的命令并返回其输出。
  • |: 管道符,将一个命令的输出作为下一个命令的输入。
  • *: 通配符,匹配任意数量的字符。

使用方法

  1. 创建脚本文件

    nano compression_script.sh
    
  2. 将上述内容复制并粘贴到脚本文件中

  3. 保存并退出编辑器(按 Ctrl+X,然后按 Y 确认保存)。

  4. 为脚本文件添加可执行权限

    chmod +x compression_script.sh
    
  5. 运行脚本

    ./compression_script.sh
    

注意事项

  • archive_name.tar.gzarchive_name.zip 替换为你想要的文件名。
  • /path/to/directory 替换为你要压缩或解压的实际目录路径。
  • tar.gz 更适合在 Linux 和 macOS 系统中使用,而 zip 则更为通用,支持在 Windows 系统中使用。
  • 16
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值