首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mktemp的问题

mktemp的问题
EN

Stack Overflow用户
提问于 2012-06-09 05:27:24
回答 3查看 5.1K关注 0票数 0

我和mktemp有点问题。我写了一个脚本:

代码语言:javascript
复制
tempdir=$(mktemp -t -d mytemp.XXXXXX)

mv ~/Desktop/File_Converted/* "$tempdir"

cd $tempdir

for f in *; do

    Some stuff...

done

当我运行它时,我得到:

代码语言:javascript
复制
$ ~/Desktop/script.sh 
mv: rename /Users/user/Desktop/File_Converted/* to /var/folders/xE/xEV9UA-AFpOdJkN2IrTAArI6Gs/-Tmp-/-d.eiXRhaHY\nmytemp.caNEzp: No such file or directory
/Users/user/Desktop/script.sh: line 21: cd: /var/folders/xE/xEV9UA-AFpOdJkN2IrTAArI6Gs+/-Tmp-/-d.eiXRhaHY: Not a directory

我似乎找不到我做错了什么。有什么需要帮忙的吗?

谢谢!

EN

回答 3

Stack Overflow用户

发布于 2012-06-09 05:33:28

你把你的-t-d弄混了。

mktemp的-t参数接受一个参数,在您的示例中,它接受-d。正因为如此,您得到的是文件名而不是目录,并且mv将失败。

这个错误特别令人困惑,因为mktemp采用了您想要的模板(mytemp.XXXXXX),并基于它生成了一个临时名称。这就是为什么在错误消息中有一个\n,mktemp的输出实际上有两行长。

相关文档:

mktemp -d -t前缀模板...

-d创建目录而不是文件。

-t前缀

生成模板(使用提供的前缀和TMPDIR (如果设置))以创建文件名模板。

根据你的评论,

为了进行调试,我建议打印$tempdir的值,看看它是否如您所期望的那样。在我看来,您仍然收到两个mv错误,这表明有些地方不对劲。

bash的set -e命令会导致脚本在遇到错误后停止,在跟踪此类问题时也非常方便。

票数 3
EN

Stack Overflow用户

发布于 2012-06-09 05:54:33

根据您的第一个错误(mv: rename /Users/user/Desktop/File_Converted/* to ...),看起来/Users/user/Desktop/File_Converted可能是空的,因此glob不是扩展为文件列表,而是被视为文字字符串。

编辑:看着你下面的评论,我注意到你的tiff文件名中有一个空格:

代码语言:javascript
复制
Dan-Dows-MacBook-Pro:tmp ddow$ ls ~/Desktop/File_Converted/ inbox.tiff

这会带来问题的。将您的单个mv替换为以下内容:

代码语言:javascript
复制
files_to_move=(~/Desktop/File_Converted/*)
mv "${files_to_move[@]}" $tempdir.

第一行创建了一个数组变量,其中每个元素都是File_Converted中的一个文件名,并且每个文件名中的空格都得到了适当的保留。在第二行中,我们使用引号中的参数扩展来扩展到文件名列表(同样,在分词后适当地保留文件名中的空格),然后将其移动到$tempdir

票数 1
EN

Stack Overflow用户

发布于 2012-06-09 05:58:08

我认为mktemp在OSX上的工作方式有点不同。它正在尝试创建带有前缀$TMPDIR的临时目录,如果执行echo $TMPDIR操作,您将看到/var/folders/...

您只需使用,例如mktemp /tmp/mytemp.XXXXXX

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10956234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档