我想要完成的是根据 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
一旦您对它正在执行您想要的操作感到满意,请将其删除