根据csv文件中文件名中字符串匹配的子集将文件移动到不同的目录



文件夹中有如下文件:

Peter_XY.tgz Tom_GF.tgz Harry_AB.tgz 

,我试图把它放在不同的文件夹基于两个文本文件,看起来如下:

A.txt 
AB1
AB
XY
SE
12S
G78
B.txt
OR1
IU345
PIE678
GF
BF
MIL

我想把文件放在两个不同的文件夹:

A 
Peter_XY.tgz Harry_AB.tgz
B
Tom_GF.tgz

现在,根据这里建议的代码:使用macOS Terminal

根据csv中的文件名将文件从一个目录移动到另一个目录我将代码调整如下:

for file in $(cat A.txt); do mv $file A; done
for file in $(cat B.txt); do mv $file B; done

如何确保代码只在"_"符号之后读取?

下面的脚本将在外部for循环中查找所有以.txt(变量txtFile)结尾的文件,因此A.txtB.txt将在外部循环中单独循环。

内部for循环使用您提供的代码来获取_之后但.tgz之前的字符。变量为seek

使用变量txtFilebasenamew/扩展名.txt作为目标目录。变量DEST,所以A.txt变成了A

最后,从其中一个文本文件中找到的任何与文件名匹配的文件都被移动到目标目录中。换句话说,mv(移动)*_${seek}.tgz(任何以_seek.tgz结尾的文件)到$DEST

for txtFile in *.txt ; do
DEST=$(basename $txtFile .txt);
echo "processing $txtFile by moving matches to $DEST";
for seek in $(cat $txtFile) ; do
echo "Moving files matching *_${seek}.tgz to $DEST";
mv *_${seek}.tgz $DEST;
done;
done

下面是你在上面指定的文件的输出:

processing A.txt by moving matches to A
Moving files matching *_AB1.tgz to A
mv: rename *_AB1.tgz to A/*_AB1.tgz: No such file or directory
Moving files matching *_AB.tgz to A
Moving files matching *_XY.tgz to A
Moving files matching *_SE.tgz to A
mv: rename *_SE.tgz to A/*_SE.tgz: No such file or directory
Moving files matching *_12S.tgz to A
mv: rename *_12S.tgz to A/*_12S.tgz: No such file or directory
Moving files matching *_G78.tgz to A
mv: rename *_G78.tgz to A/*_G78.tgz: No such file or directory
processing B.txt by moving matches to B
Moving files matching *_OR1.tgz to B
mv: rename *_OR1.tgz to B/*_OR1.tgz: No such file or directory
Moving files matching *_IU345.tgz to B
mv: rename *_IU345.tgz to B/*_IU345.tgz: No such file or directory
Moving files matching *_PIE678.tgz to B
mv: rename *_PIE678.tgz to B/*_PIE678.tgz: No such file or directory
Moving files matching *_GF.tgz to B
Moving files matching *_BF.tgz to B
mv: rename *_BF.tgz to B/*_BF.tgz: No such file or directory
Moving files matching *_MIL.tgz to B
mv: rename *_MIL.tgz to B/*_MIL.tgz: No such file or directory

结果如下:

├── A
│   ├── Harry_AB.tgz
│   └── Peter_XY.tgz
├── A.txt
├── B
│   └── Tom_GF.tgz
├── B.txt

最新更新