识别与.txt共享文件名的.pdf,然后将它们都移动-ksh

时间:2013-09-17 21:10:28

标签: shell unix ksh

我正在编写一个脚本,其目的是对目录中的.pdfs进行排序,并验证是否存在匹配的.txt即:

test.txt
test.pdf

然后如果存在.txt,则将它们移动到另一个文件夹。我无法弄清楚如何进行匹配。这是我正在尝试的:

#!/bin/ksh
for PDF in /top/input/*.pdf
do
if [ -e "$PDF".txt ];then
   mv ./$PDF.* ./paired/
fi
done

如果我使用测试数据而不是变量名称,它可以工作,但我无法弄清楚如何实际让它动态查找文件名并搜索它

2 个答案:

答案 0 :(得分:0)

你可以这样做:

#!/bin/ksh
for PDF in /top/input/*.pdf
do
   TXT=${PDF%.pdf}.txt
   if [ -e "$TXT" ];then
      echo mv "$PDF" "$TXT" ./paired/
   fi
done

在测试后从echo移除mv是否已经正确。

注意:

   if [ -e "$TXT" ];then
      echo mv "$PDF" "$TXT" ./paired/
   fi

可能只是

   [ -e "$TXT" ] && echo mv "$PDF" "$TXT" ./paired/

答案 1 :(得分:0)

我相信变量$ PDF将评估为pdf文件的完整路径,包括.pdf扩展名。因此,如果文件名是/top/input/test.pdf,则“$ PDF”.txt将变为/top/input/test.pdf.txt。当然,这不是你想要的。因此,在使用$ PDF之前,我相信您首先剥离了.pdf扩展名,然后您可以使用.txt。不知道如何在ksh中剥离扩展程序,但我相信一个简单的谷歌会这样做。