我有一些文件,其名称如下所示:
XXXXX_S1_X_XX_X.txt
XXXXX_S2_X_XX_X.txt
XXXXX_S3_X_XX_XXX.txt
S4_X_XX_X.txt
XXXXX_S5_XX_X.txt
...
我创建了一个名为文件夹列表:S1
,S2
,S3
,...我想移动文件XXXXX_S1_X_XX_X.txt
的文件夹中S1
,该文件XXXXX_S2_X_XX_X.txt
的文件夹中S2
等等。我写了这个简单的循环,但是我不知道如何根据对应文件夹中匹配S *的模式复制/移动文件:
for i in My_list_of_folders.txt
do
dir=${i%.txt}
mkdir "$dir"
cp "$i" "$dir"
done
略作修改的循环:
for pattern in S1 S2 S3 S4; do
mkdir -p ./"$pattern"
for filename in ./*"$pattern"*; do
[ ! -f "$filename" ] && continue
mv -i "$filename" "$pattern"/
done
done
这遍历模式字符串S1
,S2
,S3
和S4
。内部循环使用当前模式字符串在当前目录中查找包含该字符串任何位置的名称。它会跳过非正规文件(如目录S1
,S2
等他们自己)和移动其他一切针对该模式字符串相应的目录匹配。
正如slm在注释中指出的(现在已删除),在这种情况下,内部循环中的操作可能会缩短为
[ ! -f "$filename" ] || mv -i "$filename" "$pattern"/
或者
[ -f "$filename" ] && mv -i "$filename" "$pattern"/
如果您有重叠的模式,例如S1
和S11
,那么您将需要先做更长的模式。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句