Bash中如何无需cd将指定文件打包到指定目录的tar且不保留目录结构
解决方案
核心实现原理
使用tar命令自带的-C参数即可满足需求,该参数会让tar在处理后续文件前临时切换到指定目录,不会改变你当前shell的工作目录,也不需要手动执行cd命令,且打包/追加的文件只会记录文件名本身,不会携带上层目录路径。
1. 首次创建无目录结构的tar包
对应你的示例场景,将/home/user/Desktop/source/file.txt打包到/home/user/bin/tar_dir/files.tar,命令如下:
tar -cf /home/user/bin/tar_dir/files.tar -C /home/user/Desktop/source file.txt
参数说明:
-c:表示创建新的tar包-f:后面紧跟要生成的tar包的完整路径-C /home/user/Desktop/source:临时切换到源文件所在的目录- 末尾的
file.txt:要打包的文件名(在-C指定的目录下)
2. 向已有tar包追加文件
使用--append参数配合-C即可实现无路径追加,比如你要追加/home/user/documents/report.pdf到已有的files.tar中,命令如下:
tar --append -f /home/user/bin/tar_dir/files.tar -C /home/user/documents report.pdf
3. 验证tar包内部结构
执行以下命令可以查看tar包内的文件列表,确认没有携带上层目录路径:
tar -tf /home/user/bin/tar_dir/files.tar
正常输出结果为:
file.txt report.pdf
解压时文件会直接释放到当前解压目录,不会生成嵌套文件夹。
注意事项
- 如果需要一次打包/追加多个同目录下的文件,直接在
-C指定的目录后面空格分隔填写多个文件名即可 - 如果文件名包含空格、特殊字符,需要用英文双引号包裹文件名
- 注意
-C参数的位置:必须放在对应要处理的文件的前面,tar会按参数顺序执行目录切换操作
内容的提问来源于stack exchange,提问作者K M
相关产品推荐
相关产品推荐

