2011-03-24 68 views
1

我试图写一个bash脚本,它下面的原始文件:的Bash shell脚本glob的文件在几个目录,添加到压缩文件并删除

  1. 枚举通过文件列表中的目录中,匹配指定模式
  2. 创建
  3. 移除(即删除)匹配的文件从自己的源目录

包含匹配的文件tar文件为了简单起见,我INTEN d使用的目录和文件模式

这是我想出了到目前为止的硬编码列表:

#!/bin/bash 

filenames[0]='/home/user1/*.foo' 
filenames[1]='/some/otherpath/*.fbar' 

for f in ${filenames[@]} 
    do 
     echo "$f" 
done 

但是,我unusure如何从这个点开始进行。具体而言,我需要帮助的:

  1. 如何glob的匹配模式$ F
  2. 如何(从所有目录即)在一个添加匹配的文件的整个列表到tar文件去
  3. 文件

关于删除文件,我正在考虑简单地遍历上面第2步中获取的整个列表,并且'rm'实际文件 - 是否有更好/更快/更优雅的方式?

PS:

我在Ubuntu LTS 10.0.4运行此

回答

0

tar(1)支持的--remove-files选项将其添加到压缩文件后,将删除的文件。

根据你想要用你的shell球体做什么,你也许可以忽略在那里做所有额外的工作。试试这个:

tar cf /dir/archive.tar --remove-files /home/user1/*.foo /some/otherpath/*.fbar 
+0

谢谢。这项工作 – oompahloompah 2011-03-26 10:17:03

0

如果你想,因为你有很多目录,使用循环,则可以使用-r选项追加到tar文件。将档案添加到档案后,您也可以使用--remove-files删除档案。

filenames[0]='/home/user1/*.foo' 
filenames[1]='/some/otherpath/*.fbar' 

for f in "${filenames[@]}" 
do 
    tar -rvf --remove-files foo.tar $f 
done 

如果没有--remove-files选项,使用rm $ftar命令后。

+0

我猜如果档案不存在,档案会被创建?我猜是这样,因为我(明显?),不能在循环中使用c选项 - 因为该文件将在每次迭代时被覆盖... – oompahloompah 2011-03-24 10:54:29

+0

@oompahloompah是的,它会创建,如果它不存在。 – dogbane 2011-03-24 10:55:41

相关问题