我有一个可能存在或可能不存在的文件列表,我需要使用tar作为更大脚本的一部分进行压缩和打包。目前我有,
tar -czvf config.tar.gz file1.xml file2.xml file3.xml
问题不是所有文件都可能存在,如果不存在,则会出错。检查和打包文件的最佳方法是什么?
答案 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函数:
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