文件夹中有如下文件:
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.txt
和B.txt
将在外部循环中单独循环。
内部for循环使用您提供的代码来获取_
之后但.tgz
之前的字符。变量为seek
。
使用变量txtFile
的basename
w/扩展名.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