【问题标题】:how to use relative path in .sh in order to make my tar files include only the folder tar is created from instead of its fullpath如何在 .sh 中使用相对路径以使我的 tar 文件仅包含创建 tar 的文件夹而不是其完整路径
【发布时间】:2011-07-12 08:33:12
【问题描述】:

在一个单声道 exe 中,我正在创建包含以下代码的 .sh 脚本文件

tarcreator.sh:

tar -cvf /data/folder1/folder2/.../xyz.tar /data/...../tarHomeFolder/myTarFolder > /data/logs/tarLogs.txt 

.... 代码继续。

这个 .sh 文件位于 /data/...../tarHomeFolder 中,在我的 .exe 中,我使用“bash 'full path of .sh file'”来调用它

当我以这种方式运行此代码时,它会创建 tar,但是当我打开 tar 时,我会看到根目录中的文件夹.. (data/..../tarHomeFolder/myTarFolder/.....)我希望我的 tar 仅包含其文件夹(myTarFolder)的目录结构。

然后我将代码更改为:

tar -cvf /data/folder1/folder2/.../xyz.tar myTarFolder > /data/logs/tarLogs.txt 

知道 .sh 文件在 tarHomeFolder 中,但我的脚本没有告诉 myTarFolder 有这样的文件或目录 ..

当我在命令提示符中直接使用 tar 命令时,使用命令

tar -cvf /data/folder1/folder2/.../xyz.tar myTarFolder > /data/logs/tarLogs.txt 

它会根据需要创建 tar 目录结构,那么,我怎样才能让它在我的由 mono .exe 创建和执行的 bash 文件中做同样的事情?

【问题讨论】:

  • 我刚刚注意到为什么我没有这样的文件或目录错误,这是因为单声道 .exe 文件解释了相对于其自身路径的相对路径。 .exe 位于 /data/....../tarApps 中,当我更改它时,可以使用 cd ../tarHomeFolder 从 tarApps 访问 tarHomeFolder,它创建了 tar 文件,但这次 tar 的根目录被命名为“ ..\tarHomeFolder\myTarFolder......" 那么,这会改变您提供的任何建议吗?

标签: linux bash relative-path


【解决方案1】:

您需要做的就是在运行tar 之前更改您的目录。像这样的:

# If your full path to the directory is in DIR = "/data/...../tarHomeFolder/myTarFolder"
cd $(dirname $DIR)
tar -cvf /data/folder1/folder2/.../xyz.tar $(basename $DIR) > /data/logs/tarLogs.txt 

这将在您的 tar 文件中留下相对路径,以 myTarFolder 开头。

有用的参考资料:

【讨论】:

  • 谢谢你,我刚刚测试了你的建议,它奏效了。谢谢
【解决方案2】:

类似这样的:

tar -cvf /data/folder1/folder2/.../xyz.tar -C /data/...../tarHomeFolder/ myTarFolder > /data/logs/tarLogs.txt

【讨论】:

  • 它不像我想要的那样可见,有一个带有 tarHomeFolder 路径的 -C 选项,最后的“裸”参数是 myTarFolder,相对于此。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-08
  • 2021-12-20
相关资源
最近更新 更多