Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 在UNIX中解压时获取完整文件路径_Shell_Unix_Zip_Unzip - Fatal编程技术网

Shell 在UNIX中解压时获取完整文件路径

Shell 在UNIX中解压时获取完整文件路径,shell,unix,zip,unzip,Shell,Unix,Zip,Unzip,我被一个问题困住了,作为一个shell脚本的初学者,实现它会让人感到困惑 我需要在解压shell中的文件时提取文件名(其中包含具有不同路径的不同文件) 示例: /java/server/test/Class1.java /java/server/Xml1.xml 输出 以下是一些局部变量的输出: /java/server/test/ /java/server/ 注意:我正在为此使用解压实用程序。如果您获得了完整的文件名,包括$filename中的路径,那么 ${Filename##*/} 将

我被一个问题困住了,作为一个shell脚本的初学者,实现它会让人感到困惑

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

示例:

/java/server/test/Class1.java

/java/server/Xml1.xml

输出

以下是一些局部变量的输出:

/java/server/test/

/java/server/


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

如果您获得了完整的文件名,包括$filename中的路径,那么

${Filename##*/} 
将给出路径和

${Filename%/*} 

将给出文件名。

只需正常解压缩文件即可

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)

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

unzip a.zip | sed 's/.*: \(.*\)\/.*$/\1/' 
它将为您提供没有文件名的目录名。如果需要uniq值,则使用
uniq
命令

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

我是否很清楚,您只想正常提取文件,但也要单独存储提取文件的所有路径(在变量或文件中)?@Fabio是的,正确!!它不起作用。我将文件内容提取到目录中,然后运行您提到的第二个命令。您是否在刚刚提取的目录中运行了第二个命令?