在 shell 脚本中打印来自不同文件夹且具有相同后缀整数值的文件(如果存在)

在 shell 脚本中打印来自不同文件夹且具有相同后缀整数值的文件(如果存在)

我有两个不同的文件夹

Folder1                       Folder2
cmp_data_0.bin                decmp_data_0.bin
cmp_data_1.bin                decmp_data_1.bin
cmp_data_89.bin               decmp_data_78.bin

我的 shell 脚本遍历 folder1 中的文件。我想知道 folder2 中是否存在具有相同后缀整数值的对应文件,即 ( comp_data_0.bin, decmp_data_0.bin ),( cmp_data_1.bin, decmp_data_1.bin )。

 for file in Folder1/*;
    do
      for file1 in Folder2/*;
      do
      ?? How to check for corresponding file with same suffix value as $file
    done
done

我需要在获取具有相同后缀整数值的匹配文件后,稍后处理文件和文件 1。

答案1

无需迭代 中的文件Folder2。对于 中的每个文件,Folder1将其路径名重建(翻译)为 中预期的对应文件的路径名Folder2。然后检查该文件是否存在。

#!/bin/sh

prefix1=Folder1/cmp_data_
suffix1=.bin
prefix2=Folder2/decmp_data_
suffix2=.bin

for f in "$prefix1"*"$suffix1"; do
   g="${f#"$prefix1"}"
   g="${g%"$suffix1"}"
   g="$prefix2$g$suffix2"
   if [ -e "$g" ]; then
      printf '%s\t->\t%s\n' "$f" "$g"
   else
      printf '%s\t--\t%s\n' "$f" "NO MATCH"
   fi
done

笔记:

  • 代码没有检查匹配的部分是否*全部是数字。
  • shebang#!/bin/sh表示代码是可移植的。您已标记。该代码在 Bash 中也能运行。
  • 我在输出中使用了制表符,因此您可以通过管道连接到 来改善视觉布局column -ts $'\t'。这在 Bash 中可以工作;但它可能无法工作,sh因为$'\t'不可移植。更可移植的语法是column -ts "$(printf '\t')",但column它本身首先就不可移植(即 POSIX 未指定)。

相关内容