嘿 我需要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:无法打开:没有这样的文件或目录
任何人都可以看到我可以做些什么来解决这个问题?
答案 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目录。