关于目录tarring脚本的快速问题

时间:2010-12-03 20:22:48

标签: unix scripting tar

嘿 我需要tar某个目录中的所有目录。我有两个问题,我一直得到隐藏的目录,这是我不想要的,我需要将它们放在其他地方,一旦它们被涂焦。

以下是我现在正在做的事情:

for file in $(find /data/shares/builds/place1/ -maxdepth 1 -type d \( ! -regex '.*' \) );do tar zcf  ../Place2_$1_$timeStamp/$file.tar.gz $file;done

我仍然收到隐藏文件,我收到第一个位置不存在的错误。我收到的消息是:

../ Place2_1.0.1_1012031412 // data / shares / builds / Place1 / Project1.tar.gz:无法打开:没有这样的文件或目录

任何人都可以看到我可以做些什么来解决这个问题?

1 个答案:

答案 0 :(得分:2)

首先,你的find命令不正确(尝试自己测试)。

此find命令应该为您提供所需的目录列表:

find /data/shares/builds/place1/ -mindepth 1 -maxdepth 1 -type d ! -name '.*'

(你需要-mindepth 1以避免列出包含目录本身,并且! - name按预期工作,而你的正则表达式方法则没有。)

其次,请注意find的输出包括每个目录的完整路径名(例如“/ data / shares / builds / place1 / Project1”,所以将整个字符串分配给$ file变量从而结束了你想要创建的新tar文件的目标“文件名”。这可能不是你真正想要的 - 我希望你试图创建新的tarball,例如“../Place2_1。 0.1_1012031412 / Project1.tar.gz“。假设是这样,使用basename从路径名中删除目录。像这样:

for file in $(
    find /data/shares/builds/place1/ -mindepth 1 -maxdepth 1 -type d ! -name '.*'
  ); do tar zcf  ../Place2_$1_$timeStamp/$(basename $file).tar.gz $file;done

最后,请注意,您需要提前手动创建Place2_ $ 1_ $ timestamp目录。