不确定如何询问有关之前发布的问题的问题,所以如果我只是添加到上一个问题,请以某种方式随时告诉我。 无论如何,我昨天发了一个问题 shell script to change .pdf files to .png Mac OS 10.3
sips确实有效,如果我在命令行上一次执行一个文件,但是我的for循环不起作用
继承人我得到了什么
for pdf in *{pdf,PDF} ; do
sips -s format png --out "${pdf%%.*}.png" "$pdf"
done
及其说法
Warning: *{pdf, not a valid file - skipping
Error 4: no file was specified
Try 'sips --help' for help using this tool
感谢
答案 0 :(得分:2)
对我来说很好看。您确定使用bash来执行此脚本而不是/bin/sh
吗?
确保您的第一行是:
#! /bin/bash
尝试回显文件并查看其是否有效:
for pdf in *{pdf,PDF} ; do
echo "$pdf"
done
答案 1 :(得分:1)
如果你的shell是bash,你可以这样做
shopt -s nullglob
当没有globs匹配时,这会改变bash的行为。通常,如果你说*pdf
并且没有以“pdf”结尾的文件,它将返回一个文字星号。设置nullglob
会使bash按照您的预期执行,并且在这种情况下不返回任何内容。
或者,更强大,你可以这样做
for pdf in *[pP][dD][fF] ; do
sips -s format png --out "${pdf%%.*}.png" "$pdf"
done
在没有设置nullglob的情况下,以及在支持使用此语法进行参数替换的所有shell中,哪个应该可以正常工作。请注意,如果您有两个PDF文件,其名称因扩展名而异,则由于存在名称冲突的风险,在案例敏感的文件系统上仍然不健壮。要正确处理这种情况,你可以做到
for pdf in *[pP][dD][fF] ; do
sips -s format png --out "${pdf%%.*}.$(tr pPdDfF pPnNgG <<<"${pdf#*.}")" "$pdf"
done
这应该足够强大。
编辑:已更新,以更正扩展程序中错误的$pdf
扩展。
答案 2 :(得分:0)
<强> UPDATED2 强>
#!/bin/bash
# Patters patching no files are expanded into null string
# this will allow us to make this script work when no files
# exist in this directory with this extension
shopt -s nullglob
# Consider only the lowercase 'pdf' extensions and make them lowercase 'png'
for b in *.pdf
do
c="$b"
b="${b/.pdf/}"
convert"$c" "$b.png"
done
# Consider only the uppercase 'pdf' extensions and make them uppercase 'png'
for b in *.PDF
do
c="$b"
b="${b/.PDF/}"
convert "$c" "$b.PNG"
done
请注意,convert
计划是ImageMagick
计划的一部分。
答案 3 :(得分:-1)
你正在使用的glob语法看起来很时髦。尝试:
for pdf in *.pdf *.PDF ; do
...
done