Shell 在UNIX中解压时获取完整文件路径
我被一个问题困住了,作为一个shell脚本的初学者,实现它会让人感到困惑 我需要在解压shell中的文件时提取文件名(其中包含具有不同路径的不同文件) 示例: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##*/} 将
/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是的,正确!!它不起作用。我将文件内容提取到目录中,然后运行您提到的第二个命令。您是否在刚刚提取的目录中运行了第二个命令?