【发布时间】:2014-12-07 02:08:44
【问题描述】:
我的 bash 脚本有点问题。我是unix世界的新手,所以我发现很难处理一个练习。我要做的是在 Solaris 服务器上查找具有特定名称的文件,在特定时间进行修改并将它们归档在一个 .tar 文件中。前两点很容易,但我在尝试存档时遇到了噩梦。问题是,我不断地将整个文件树(最后有文件)归档到 .tar 文件,但我只需要一个文件。我的代码如下所示:
find ~ -name "$maska" -mtime -$dni | xargs -t -L 1 tar -cvf $3 -C
其中$maska 是文件名,$dni 是指修改时间,$3 只是一个存档名称。我发现了 -C 开关,让我跳转到所需文件所在的文件夹,但是当我将它与 xargs 一起使用时,它似乎只是跳转到那里而没有做任何其他事情。
所以我的问题是:
1) 有没有可能以这种方式实现我的目标?
请记住,我不在 gnu tar 上工作。而且我必须使用命令:tar、find。
编辑:我想详细说明我的问题。例如,当我将脚本用于文件 a 时,它应该查找它,因为脚本中显示的点(它是 ~ )并且它会找到的所有内容都应该在一个 tar 文件中。
我现在得到的是(我在 /home/me/Scripts):
-bash-3.2$ ./Script.sh a 1000 backup
a /home/me/Program/Test/a/ 0K
a /home/me/Program/Test/a/a.c 1K
a /home/me/Program/Test/a/a.out 8K
所以脚本已经做了一些打包。接下来我想看看我打包的文件,所以:
-bash-3.2$ tar -tf backup
/home/me/Program/Test/a/
/home/me/Program/Test/a/a.c
/home/me/Program/Test/a/a.out
这就是问题所在。 tar 文件中包含所有路径,所以如果我解压它,而不是只获取我想要归档的文件,我会将它们替换到它们的旧位置。对于可视化:
-bash-3.2$ ls
Script.sh* Script.sh~* backup
-bash-3.2$ tar -xvf backup
x /home/me/Program/Test/a, 0 bytes, 0 tape blocks
x /home/me/Program/Test/a/a.c, 39 bytes, 1 tape blocks
x /home/me/Program/Test/a/a.out, 7928 bytes, 16 tape blocks
-bash-3.2$ ls
Script.sh* Script.sh~* backup
这就是问题所在。
所以我想要的只是将所有需要的文件(上面示例中的一个)打包到一个没有这些路径的 tar 文件中,所以它只会在我运行 Script.sh 的目录中解压缩。
【问题讨论】: