从路径中提取目录

8 浏览
0 Comments

从路径中提取目录

在我的脚本中,我需要正在处理的文件的目录。例如,文件="stuff/backup/file.zip"。我需要找到一种方法从变量$file中获取字符串"stuff/backup/"。

0
0 Comments

问题:从路径中提取目录

原因:使用内置命令而不是依赖外部命令是技术上更好的选择。获取基本名称的方法是使用${file##*/}。除非需要,否则不需要使用外部命令。

解决方法:使用${file%/*}可以提取目录。下面是一个示例:

file="/stuff/backup/file.zip"
filename=${1##*/}     # file.zip
directory=${1%/*}     # /stuff/backup

这种方法也是完全符合POSIX标准的。希望对你有所帮助!:-)

然而,dirname相对于更高效的内置方法有一个优势的情况是,如果你不能确定你的路径是否是完全合格的。如果你有file=file.zipdirname "$file"将返回.,而${file%/*}将返回file.zip

当然,你可以使用分支来解决这个问题:case $file in */*) dir=${file%/*};; *) dir=.;; esac仍然符合POSIX标准并解决了这个问题。

0
0 Comments

在这段对话中,提到了一个关于从路径中提取目录的问题。问题的出现是因为作者在使用basename命令时发现它返回的是文件名,而不是目录名。为了解决这个问题,作者询问了其他人的意见,并尝试了一些方法,但没有找到解决方案。其中一个人建议使用dirname命令来提取目录名。然而,另一个人指出需要在命令中添加引号,以确保可以处理包含空格或特殊字符的文件名。

解决这个问题的方法是使用dirname命令来提取目录名,并确保在命令中添加引号以处理特殊字符。以下是一个示例代码:

file="/path/to/file.zip"
dir=$(dirname "$file")
echo "$dir"

这将输出/path/to作为文件/path/to/file.zip的目录名。通过使用dirname命令和添加引号,可以正确地提取文件的目录名。

0
0 Comments

问题的出现原因是用户需要从给定的路径中提取目录名,但是在Windows的批处理脚本中,这一操作变得非常困难。用户尝试使用dirname命令来提取目录名,但是在没有加上引号的情况下,如果文件或目录名中含有空格,这个命令将无法正常工作。

为了解决这个问题,用户需要使用带引号的dirname命令来确保空格不会导致问题。这样,无论文件或目录名中是否包含空格,都可以正确提取目录名。另外,如果用户需要提取绝对路径而不是相对路径,他们可能需要尝试其他方法,因为dirname命令只能提取相对路径。

这个问题的解决方法是使用dirname命令,并且要确保在路径中含有空格时加上引号。如果用户需要提取绝对路径,可能需要尝试其他方法。此外,这个问题也提到了在Windows的批处理脚本中执行这个操作的困难性,这也是用户不建议使用批处理脚本的一个原因。

0