我在StackOverflow上找到了一个脚本,我修改了一下。 该脚本对子文件夹中的文件夹中的所有文件进行分类,每个子文件夹只有8个文件。但是我的文件名为0541_2pcs.jpg。 2件意味着两件(副本)。
所以我希望脚本在将文件分成每个文件夹时将其计算在内。例如一个文件夹可能有6个文件,这个0541_2pcs.jpg字面意思是2个文件,依此类推,具体取决于文件名中指示的数字。
这是剧本:
cd photos;
dir="${1-.}"
x="${1-8}"
let n=0
let sub=0
while IFS= read -r file ; do
if [ $(bc <<< "$n % $x") -eq 0 ] ; then
let sub+=1
mkdir -p "Page-$sub"
n=0
fi
mv "$file" "Page-$sub"
let n+=1
done < <(find "$dir" -maxdepth 1 -type f)
任何人都可以帮助我吗?
答案 0 :(得分:0)
您可以通过[ ${file/2pcs/x} != $file ]
之类的代码添加测试文件名是否包含字符串“2pcs”。在下面显示的脚本中,如果该测试成功,则n
第二次递增。请注意,如果测试包含在目录中的第八个文件是多片文件,则最终会在该目录中包含太多文件。这可以通过脚本不执行的其他测试来处理。请注意,您的脚本没有充分理由要求bc
执行模数,并且从第一个参数设置dir
和x
都不起作用;我的脚本使用两个参数。
#!/bin/bash
# To test pagescript, create dirs four and five in a tmp dir.
# In four, say
# for i in {01..30}; do touch $i.jpg; done
# for i in 03 04 05 11 16 17 18; do mv $i.jpg ${i}_2pcs.jpg; done
# Then in the tmp dir, say
# rm -rf Page-*; cp four/* five/; ../pagescript five; ls -R
#cd photos; # Leave commented out when testing script as above
dir="${1-.}" # Optional first param is source directory
x=${2-8} # Optional 2nd param is files-per-result-dir
let n=x
let sub=0
for file in $(find "$dir" -maxdepth 1 -type f)
do # Uncomment next line to see values as script runs
#echo file is $file, n is $n, sub is $sub, dir is $dir, x is $x
if [ $n -ge $x ]; then
let sub+=1
mkdir -p Page-$sub
n=0
fi
mv "$file" Page-$sub
[ ${file/2pcs/x} != $file ] && let n+=1
let n+=1
done