我有几个文件名称如下:
KILN_SDUS51_N0SILN_201203020003
KILN_SDUS51_N0QILN_201203020003
KILN_SDUS51_N0RILN_201203020003
我需要根据_
和之间的三个字符ILN
(即N0S
,,N0Q
)将它们全部归档到文件夹中N0R
。
我一直在尝试编写一个 bash 脚本来执行此操作,但我发现大多数类似的例子都使用 f% 参数,这在这种情况下似乎不适用。
答案1
类似这样的事情应该做:
for file in ./*_???ILN*; do
dir=${file%ILN*}
dir=${dir##*_}
mkdir -p "./$dir" &&
mv -iv "$file" "./$dir"
done
看常见问题 100有关 bash 中的字符串操作的更多信息。
答案2
在python中:
#!/usr/bin/env python3
import os
import shutil
dr = sys.argv[1]; files = os.listdir(dr)
for f in [f for f in files if os.path.isfile(dr+"/"+f)]:
folder = dr+"/"+f.split("_")[2].replace("ILN", "")
if not os.path.exists(folder):
os.makedirs(folder)
shutil.move(dr+"/"+f, folder+"/"+f)
将其复制到一个空文件中,
通过以下方式运行:
python3 <script> <directory>
如有必要,这将创建(子)文件夹,将文件移动到文件夹中
答案3
使用grep
:
#!/bin/bash
for file in ./KILN_SDUS51_*; do
dir="$(grep -Po "^.*_.*_\K.*(?=ILN)" <<<"$file")"
mkdir "$dir" && mv "$file" "$dir"
done