我正在尝试编写一个执行以下操作的bash脚本:
为了简单起见,我打算使用硬编码的目录和文件模式列表
这是我到目前为止所提出的:
#!/bin/bash
filenames[0]='/home/user1/*.foo'
filenames[1]='/some/otherpath/*.fbar'
for f in ${filenames[@]}
do
echo "$f"
done
然而,我不知道如何从这一点开始。具体来说,我需要帮助:
关于删除文件,我想简单地遍历上面步骤2中获得的整个列表,并且'rm'是实际文件 - 是否有更好/更快/更优雅的方式?
PS:
我在Ubuntu 10.0.4 LTS上运行它
答案 0 :(得分:0)
tar(1)
支持--remove-files
选项,该选项会在将文件添加到存档后删除这些文件。
根据您尝试使用shell globs进行的操作,您可能无视那里的所有额外工作。试试这个:
tar cf /dir/archive.tar --remove-files /home/user1/*.foo /some/otherpath/*.fbar
答案 1 :(得分: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 $f
命令后使用tar
。