脚本 - 根据参数移动与文本文件中的记录匹配的文件

脚本 - 根据参数移动与文本文件中的记录匹配的文件

我想要完成的是根据 2 个参数移动目录中与文本文件中的记录匹配的文件

例如,我的文本文件中有一条记录,内容如下:

SPPARK|10416|3308123|3308123|Uphold|Thelma|1930/05/20||

我的目录中有一个文件,内容如下:

1123_M1123_UPHOLD_M1123_MESSAGE_SPPARK_348642.pdf

因此,如果姓氏UPHOLD和第四个字段M1123与我的文本文件中的字段匹配,那么我想将它们移动到指定的目录。

for files in test/* ; do
 echo $files | awk -F "_" '{print $3,$4}'
done

答案1

试试这个。测试后将“echo”命令更改为 cp 或 mv:

for f in samples.txt ; do 
  echo /source/path/*$(cut -d '|' -f 5,2 $f | tr '|'a-z '_'A-Z)*.pdf /destination/path
done

对不起,我的错。谢谢@Kusalananda。请认为上述答案是错误的,并尝试这个答案。假设您正在过滤第 5 列和第 4 列,它将文件从 /src 复制到 /dst:

awk -F "|" '{system("cp /src/*"toupper($5)"_"$4"*.pdf /dst")}' samples.txt

答案2

我会以相反的方式处理这个问题:

  • 逐行读取文本文件并将其拆分为字段
  • 匹配并移动相应的文件

EG(假设bash和 GNU mv):

#!/bin/bash

shopt -s nullglob

while IFS='|' read -r loc a b c last first d e; do 
  echo mv --no-clobber -t path/to/target/ -- *_"$a"_"${last^^}"_*_*_*_*.pdf
done < file.txt

echo一旦您对它正在执行您想要的操作感到满意,请将其删除

相关内容