Linux 压缩制定目录下指定类型的多个文件

news/2024/9/29 1:28:04/

编写一个 Shell 脚本,将指定目录下的指定类型的文件打成一个压缩包

这里主要会涉及到文件查找find和打包tar命令

这是第一版,里面存在着很大的问题

if ["$#" -ne 3]; then # 这里是运行报错的第1行echo "用法:$0 <目录> <文件类型> <输出压缩包>"exit 1
fidir=$1
file_type=$2
compose_file_path=$3# 检查文件夹是否存在
if [! -d "$dir" ]; then # 这里是运行报错的第11行echo "error:目录:'$dir'不存在."exit 1
fi
# 符合要求的文件是否大于等于1个
target_files=$(find "$dir" -type f -name "$file_type")
if [ -z "$target_files"]; then # 这里是运行报错的第17行echo "error:没有找到:'$filee_type'对应类型的文件."exit 1
fi# 打包符合要求的文件tar -czvf "$compose_file_path" "$target_files"echo "打包成功."

我们来看看运行报错

root@hcss-ecs-c2b8:/var/test# vim compose_file.sh
root@hcss-ecs-c2b8:/var/test# chmod +x compose_file.sh 
# 这里我们要做的是将 ./目录下的以".sh"结尾类型的文件进行打包放在test.tar.gz中
root@hcss-ecs-c2b8:/var/test# ./compose_file.sh ./ "*.sh" test.tar.gz
./compose_file.sh: line 1: [3: command not found
./compose_file.sh: line 11: [!: command not found 
./compose_file.sh: line 17: [: missing `]' # 这三个个相同的报错是因为没有在中括号和条件之间空一格导致的
tar: ./compose_file.sh\n./dir1/param_trans.sh\n./dir1/hello.sh\n./dir1/helloworld.sh\n./file_move.sh: Cannot stat: No such file or directory # 这个报错是因为 在最后打包命令使用时,$target_files 需要没有引号,以便传递多个文件名,否则会将其识别为一个文件,这当然就找不到对应文件和目了
tar: Exiting with failure status due to previous errors
打包成功.

这里是修改后的脚本

if [ "$#" -ne 3 ]; thenecho "用法:$0 <目录> <文件类型> <输出压缩包>"exit 1
fidir=$1
file_type=$2
compose_file_path=$3# 检查文件夹是否存在
if [ ! -d "$dir" ]; thenecho "error:目录:'$dir'不存在."exit 1
fi
# 符合要求的文件是否大于等于1个
target_files=$(find "$dir" -type f -name "$file_type")
if [ -z "$target_files" ]; thenecho "error:没有找到:'$filee_type'对应类型的文件."exit 1
fi# 打包符合要求的文件tar -czvf "$compose_file_path" $target_filesecho "打包成功."

以及运行结果

root@hcss-ecs-c2b8:/var/test# ./compose_file.sh ./ "*.sh" test.tar.gz
./compose_file.sh: line 1: [3: command not found
./compose_file.sh
./dir1/param_trans.sh
./dir1/hello.sh
./dir1/helloworld.sh
./file_move.sh
打包成功.
root@hcss-ecs-c2b8:/var/test# ll
total 24
drwxr-xr-x  3 root root 4096 Sep 23 23:14 ./
drwxr-xr-x 14 root root 4096 Sep 21 08:28 ../
-rwxr-xr-x  1 root root  549 Sep 23 23:02 compose_file.sh*
drwxr-xr-x  2 root root 4096 Sep 22 10:07 dir1/
-rwxr-xr-x  1 root root  473 Sep 22 10:07 file_move.sh*
# 这个就是打包后产生的文件
-rw-r--r--  1 root root  931 Sep 23 23:13 test.tar.gz
root@hcss-ecs-c2b8:/var/test# ./compose_file.sh /var/test "*.sh" test.tar.gz
# 当我们使用绝对路径时这里会有一个提示
tar: Removing leading `/' from member names
/var/test/compose_file.sh
tar: Removing leading `/' from hard link targets
/var/test/dir1/param_trans.sh
/var/test/dir1/hello.sh
/var/test/dir1/helloworld.sh
/var/test/file_move.sh
打包成功.

当使用 tar 命令创建归档时,如果看到 tar: Removing leading ‘/’ from hard link targets 的消息,表示你在归档中使用了绝对路径。tar 会自动去掉绝对路径的前导斜杠,以便在解压时能够保持相对路径。


http://www.ppmy.cn/news/1531402.html

相关文章

如何在openEuler上安装和配置openGauss数据库

本文将详细介绍如何在openEuler 22.03 LTS SP1上安装和配置openGauss数据库&#xff0c;包括数据库的启动、停止、远程连接配置等关键步骤。 1、安装 使用OpenEuler-22.03-LTS-SP1-x64版本的系统&#xff0c;通过命令行安装openGauss数据库。 1.1、确保系统软件包索引是最新…

Markdown语法总结

Markdown 是一种轻量级的标记语言&#xff0c;它让我们可以以易读易写的纯文本格式编写文档&#xff0c;然后转换为有效的 HTML。它广泛应用于撰写文档、博客、论坛帖子以及各种需要格式化文本的场合。以下是我准备的 Markdown 语法的详细总结&#xff1a; 1. 标题 (Headers) …

必收藏,售后客服日常回复必备的话术 (精华版)

在售后客服工作中&#xff0c;使用恰当的话术对客户进行回复至关重要。本文精选了售后客服日常工作中必备的精华话术&#xff0c;旨在帮助客服人员提升回复效率和服务质量。其中包括客户投诉处理、问题解决、礼貌用语等多个方面的话术内容。 前言 在售后客服工作中&#xff0c…

解决方案:如何区分python里面绝对路径跟相对路径的不同

文章目录 一、现象二、解决方案 一、现象 在工作中&#xff0c;会经常混淆绝对路径跟相对路径的区别&#xff0c;我也是找了资料之后就懂了&#xff0c;但时间一长就混淆了&#xff0c;于是&#xff0c;我在这里记录下 二、解决方案 在Python中&#xff0c;绝对路径和相对路…

热门小说推文视频素材资源网站推荐

在抖音制作小说推文视频时&#xff0c;寻找合适的素材至关重要。作为一名经验丰富的视频剪辑师&#xff0c;今天我为大家推荐几个可以下载爆款推文视频素材的网站&#xff0c;让你轻松获取灵感和资源&#xff01; 蛙学网 蛙学网是国内顶级短视频素材网站&#xff0c;提供大量小…

kettle发邮件:使用Kettle实现自动化发信?

kettle发邮件配置教程&#xff1f;Kettle如何实现邮件发送功能&#xff1f; Kettle&#xff0c;作为一款强大的开源ETL工具&#xff0c;不仅在数据转换和加载方面表现出色&#xff0c;还能通过其内置的功能实现自动化发邮件。AokSend将详细探讨如何使用Kettle发邮件&#xff0…

【Kotlin 集合概述】可变参数vararg、中缀函数infix以及解构声明(二十)

导读大纲 1.1 使用集合: vararg、infix 调用和解构声明1.1.1 扩展 Java 集合 API1.1.2 vararg: 接受任意数量参数的函数1.1.3 处理pairs: Infix 调用和解构声明 1.1 使用集合: vararg、infix 调用和解构声明 本节将介绍 Kotlin 标准库中用于处理集合的一些函数 同时,还介绍一些…

Meta广告资料库使用教程:Facebook、Instagram海外社媒营销统统拿下!

社交媒体现今已成为大部分商家宣传推广方案中的重要工具&#xff0c;尤其是Meta旗下的两个主流社媒平台Facebook和Instagram&#xff0c;活跃用户数量以数十亿计&#xff0c;分布地区也非常广。要运用好自带影响力的社媒平台的传播力量和庞大数据&#xff0c;优化自身的宣传推广…