我从来没有这样问“做我的家庭作业”,但我真的不知道从哪里开始这个。
在使用JSignPdf自动签名之后,我将大量文档转储到目录中(--output-directory选项似乎无法输出到与输入相同的位置):
/some/dir/Signed/PDF1_signed.pdf
/some/dir/Signed/PDF2_signed.pdf
/some/dir/Signed/PDF2_signed.pdf我想找出他们的来源/未签名的对应方:
/some/dir/with/docs/PDF1.pdf
/some/dir/where/is/PDF2.pdf
/some/dir/why/this/PDF3.pdf...and将签名PDF移动到相应的目录中。
我使用这个命令,在各种目录中查找所有PDF:
find . -name '*.pdf' -exec sh -c 'exec java -jar jsignpdf-1.4.3/JSignPdf.jar ... ' sh {} +...and --我尝试过让find输出变量,然后使用IF来匹配,但没有成功。我是否需要将find输出变成多个变量?我太迷茫了
我想在一些shell中实现这一点,但是如果有Perl爱好者或者其他任何东西,我非常乐意使用另一个可移植的解决方案。
我试着把它拆散了,但还是不知道怎么实现它.
谢谢你的帮助/指导。
发布于 2013-03-15 17:39:04
使用while循环读取find找到的每个文件,并将其移动到正确的位置:
find /some/dir -name "*.pdf" ! -name "*_signed.pdf" -print0 | while IFS= read -d '' -r file
do
f="${file##*/}"
mv "/some/dir/Signed/${f%.*}_signed.pdf" "${file%/*}"
done发布于 2013-03-15 17:37:18
我也遇到了一个类似的问题。由于将/some/dir/where/is/PDF2.pdf转换为/some/dir/Signed/PDF2_signed.pdf所需的路径操作相当简单,但比在简单的一行程序中所能完成的操作要复杂得多,所以我一直在使用find来定位第一个集合,并使用一个简单的循环来一次处理它们。你提到了家庭作业,所以我尽量不要给你太多的代码。
find /dir/containing/unsigned -name '*.pdf' -print0 | while IFS= read -d path; do
fetch_signed_version "$path"
done如果fetch_signed_version是一个shell函数,那么在给定路径(如/some/dir/where/is/PDF2.pdf )的情况下,提取目录(/some/dir/where/is),计算已签名的PDF名称(PDF2_signed.pdf),然后执行必要的移动(mv /some/dir/Signed/$signed_pdf /some/dir/where/is)
实际上,fetch_signed_version非常简单:
fetch_signed_version () {
dir=${1%/*}
fname=${1##*/}
signed_name=${fname%.pdf}_signed.pdf
mv "/some/dir/Signed/$signed_name" "$dir"
}https://stackoverflow.com/questions/15438347
复制相似问题