【问题标题】:Get full filepath while unzip in UNIX在 UNIX 中解压缩时获取完整的文件路径
【发布时间】:2016-02-29 08:40:30
【问题描述】:

我被一个问题困住了,作为 shell 脚本的初学者,实现它会变得很困惑。

我需要在shell中解压缩文件(包含不同路径的不同文件)时提取文件名。

示例:

/java/server/test/Class1.java

/java/server/Xml1.xml

输出

我应该得到以下一些局部变量的输出:

/java/server/test/

/java/server/

注意:我正在为此使用解压缩实用程序。

【问题讨论】:

  • 我是否理解得很好,您只是想正常提取文件,但还要单独存储提取文件的所有路径(在变量中或在文件中)?
  • @Fabio 是的,正确!!

标签: shell unix zip unzip


【解决方案1】:

如果你有完整的文件名,包括 $Filename 中的路径,那么

${Filename##*/} 

会给出路径和

${Filename%/*} 

将给出文件名。

【讨论】:

    【解决方案2】:

    您可以使用sed 的组合来完成此操作。

    unzip a.zip | sed 's/.*: \(.*\)\/.*$/\1/' 
    

    它会给你没有文件名的目录名。如果您需要一个 uniq 值,请使用 uniq 命令。

    unzip a.zip | sed 's/.*: \(.*\)\/.*$/\1/' | uniq
    

    【讨论】:

      【解决方案3】:

      正常解压文件即可

      unzip myfolder.zip
      

      然后遍历文件夹并获取文件路径:

      find $(pwd)/myfolder -type d
      

      最后一条命令获取 (find) 当前目录 (pwd) 中提取目录 (myfolder) 中的所有文件夹 (-type d)。
      然后你可以将它的输出重定向到一个文件

      find $(pwd)/myfolder -type d > dirnames
      

      或将其存储在变量中:

      DIRNAMES=$(find $(pwd)/myfolder -type d)
      

      【讨论】:

      • 它不工作。我将文件内容提取到目录中,然后运行您提到的第二个命令。
      • 你在刚才解压的目录中运行第二条命令了吗?
      猜你喜欢
      • 2012-01-11
      • 2011-12-12
      • 2012-04-24
      • 2019-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多