我在文件夹上有7K个奇怪的文件,我想根据文件的模式组织到不同的文件夹中。我已经给出了一些虚拟数据和脚本来演示我面临的问题。这些模式实际上比示例中显示的更多。
folder/
0001_x.dat
0002_y.dat
0003_y.dat
0004_y.dat
0005_y.dat
0006_y.dat
0007_y.dat
0008_y.dat
0009_y.dat
...
现在脚本......
#!/bin/bash
p1="x|y|z"
p2="a|b|c"
p3="m|n|o"
FILES=$(find . -type f)
for pattern in p1 p2 p3; do
mkdir $pattern-folder
echo "$FILES" | egrep $$pattern | while read file ; do mv $file $pattern-folder ; done # << the "$$pattern" doesn't work. What should be the right syntax here ?
done
done
我最终以下面的方式做到了,但我觉得它不干净。欢迎所有健康的批评和建议。
for pattern in p1 p2 p3; do
mkdir $pattern-folder
echo "$FILES" | egrep $p1 | while read file ; do mv $file $p1-folder
echo "$FILES" | egrep $p2 | while read file ; do mv $file $p2-folder
echo "$FILES" | egrep $p3 | while read file ; do mv $file $p3-folder
done
done
答案 0 :(得分:0)
#!/bin/bash
# make an array
PATTERNS[0]="x|y|z"
PATTERNS[1]="a|b|c"
PATTERNS[2]="m|n|o"
# iterate
for var in "${PATTERNS[@]}"
do
echo "${var}"
# do something
done
答案 1 :(得分:0)
虽然看起来数组对您有用,但您可以使用"${!pattern}"
代替$$pattern
来实现间接变量引用。 (您应该将参数双引号引用egrep
,但不会有帮助,因为$$
是shell替换(shell的pid)而不是间接变量引用。)