比较文件名(没有扩展名)和#34; Dir1"到子文件夹" Dir2"假设我在" Dir1"

时间:2018-03-23 20:39:45

标签: bash shell

我试图在没有扩展名的情况下比较Dir1和Dir2文件名。 Dir2是Dir1的子目录,所以我从Dir1启动脚本。

Dir1/proof1.txt
Dir1/proof2.txt
Dir1/proof3.txt
Dir1/proof4.txt
Dir1/proof5.txt
Dir1/proof6.txt

Dir1/Dir2/proof1.png
Dir1/Dir2/proof2.png
Dir1/Dir2/proof5.png

我想要的输出是存在于Dir1但不存在于Dir2的文件名:

proof3
proof4
proof6

这就是我使用(不工作)查找Dir1但不在Dir2的文件:

(找。-printf'%P \ n' | grep -v Dir2&&找到Dir2 / -printf'%P \ n'&&找到Dir2 / -printf'%P \ n')|排序| uniq -u

2 个答案:

答案 0 :(得分:1)

仅使用没有空格的干净文件名进行测试:

for f in proof*.txt ; do test -f "Dir2/$(basename "$f" .txt).png" || echo no match "$f"; done
  • 测试-f测试,如果文件存在且是普通文件。
  • basename删除扩展名(如果已给出)

答案 1 :(得分:0)

这应该做......

$ comm -23 <(ls -1 | cut -d. -f1) <(ls -1 Dir2/ | xargs -n 1 basename | cut -d. -f1)
如果您的文件名中包含.而不是分隔扩展名,则

可能无法正常工作。