如果文件存在,则为Tar列出文件

时间:2016-08-04 21:30:05

标签: bash

我有一个可能存在或可能不存在的文件列表,我需要使用tar作为更大脚本的一部分进行压缩和打包。目前我有,

tar -czvf config.tar.gz file1.xml file2.xml file3.xml

问题不是所有文件都可能存在,如果不存在,则会出错。检查和打包文件的最佳方法是什么?

2 个答案:

答案 0 :(得分:4)

试试这个bash脚本:

#!/bin/bash
files=("$@")
for i in "${!files[@]}"
do
    [ -e "${files[i]}" ] || unset files[i]
done
tar -czvf config.tar.gz "${files[@]}"

使用它:

script  file1.xml file2.xml file3.xml

通过这种方式,可以一步创建tar.gz文件,而无需在磁盘上存储中间文件。

替代方案:shell函数

要在命令提示符下使此功能不需要脚本文件,请使用以下命令创建shell函数:

tar2() { files=("$@"); for i in "${!files[@]}"; do [ -e "${files[i]}" ] || unset files[i]; done; tar -czvf config.tar.gz "${files[@]}"; }

运行此:

tar2 abc file1.xml file2.xml file3.xml

要使此功能定义永久化,请将其添加到~/.bashrc文件中。

替代方案:对文件名进行硬编码

files=(file1.xml file2.xml file3.xml)
for i in "${!files[@]}"
do
    [ -e "${files[i]}" ] || unset files[i]
done
tar -czvf config.tar.gz "${files[@]}"

答案 1 :(得分:1)

您可以在归档文件列表中使用for循环,并检查它们是否存在。请注意,您需要在未压缩存档中使用P(替换)或r(更新)模式。

u