我和mktemp有点问题。我写了一个脚本:
tempdir=$(mktemp -t -d mytemp.XXXXXX)
mv ~/Desktop/File_Converted/* "$tempdir"
cd $tempdir
for f in *; do
Some stuff...
done当我运行它时,我得到:
$ ~/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我似乎找不到我做错了什么。有什么需要帮忙的吗?
谢谢!
丹
发布于 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命令会导致脚本在遇到错误后停止,在跟踪此类问题时也非常方便。
发布于 2012-06-09 05:54:33
根据您的第一个错误(mv: rename /Users/user/Desktop/File_Converted/* to ...),看起来/Users/user/Desktop/File_Converted可能是空的,因此glob不是扩展为文件列表,而是被视为文字字符串。
编辑:看着你下面的评论,我注意到你的tiff文件名中有一个空格:
Dan-Dows-MacBook-Pro:tmp ddow$ ls ~/Desktop/File_Converted/ inbox.tiff这会带来问题的。将您的单个mv替换为以下内容:
files_to_move=(~/Desktop/File_Converted/*)
mv "${files_to_move[@]}" $tempdir.第一行创建了一个数组变量,其中每个元素都是File_Converted中的一个文件名,并且每个文件名中的空格都得到了适当的保留。在第二行中,我们使用引号中的参数扩展来扩展到文件名列表(同样,在分词后适当地保留文件名中的空格),然后将其移动到$tempdir。
发布于 2012-06-09 05:58:08
我认为mktemp在OSX上的工作方式有点不同。它正在尝试创建带有前缀$TMPDIR的临时目录,如果执行echo $TMPDIR操作,您将看到/var/folders/...
您只需使用,例如mktemp /tmp/mytemp.XXXXXX
https://stackoverflow.com/questions/10956234
复制相似问题