我有一个文件列表,其中可能存在需要压缩并打包的文件,这是更大脚本的一部分。目前我的代码如下:
tar -czvf config.tar.gz file1.xml file2.xml file3.xml
问题是并不是所有的文件都可能存在,如果它们不存在就会出现错误。检查和打包这些文件的最佳方法是什么?
我有一个文件列表,其中可能存在需要压缩并打包的文件,这是更大脚本的一部分。目前我的代码如下:
tar -czvf config.tar.gz file1.xml file2.xml file3.xml
问题是并不是所有的文件都可能存在,如果它们不存在就会出现错误。检查和打包这些文件的最佳方法是什么?
试用这个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[@]}"
for f in file1.xml file2.xml file3.xml; do
[[ -f $f ]] && tar rvf config.tar "$f"
done
# compress the tar file
gzip config.tar