我在一个目录中有大约400万个扩展名文件。
我需要一个bash脚本将它们复制到另一个目录中,以便每个目录将这些文件分类为1000个文件。
EG。
源目录是/temp/hugenooffiles/
文件名类似于m_100, m_1005, m_10005
等。
目标目录为/temp/sortedfiles/
在目标目录中,应创建一个名为1的目录,其中包含m_1
到m_999
的文件。
directory 2
,其中包含文件m_1000
到m_1999
,依此类推。
目标文件应重命名为1_m, 1000_m
等。
此外,如果目标文件夹中的文件已存在,则应覆盖它们。
请帮助。
答案 0 :(得分:0)
#!/bin/bash
SOURCE='/temp/hugenooffiles'
DEST='/temp/sortedfiles'
I=0
for FILE in "$SOURCE"/m_*; do
(( D = 1 + ++I / 1000 ))
[[ -d $DEST/$D ]] || mkdir -p "$DEST/$D" ## You can just skip dir checking but that would be slow.
cp -v "$FILE" "$DEST/$D/m_$I"
done
注意:默认情况下,Bash("$SOURCE"/m_*
)中的路径名扩展已排序。
答案 1 :(得分:0)
我修改了konsolebox的脚本并完成了这项工作。谢谢。
> #!/bin/bash
>
> SOURCE='/temp/hugenooffiles'
> DEST='/temp/sortedfiles'
>
> I=0
> for FILE in "$SOURCE"/m_*;
> do
> (( D = (( ${FILE#*_} / 1000 )) + 1 ))
> [[ -d $DEST/$D ]] || mkdir -p "$DEST/$D"
> mv -v "$FILE" "$DEST/$D/${FILE#*_}_m"
> (( ++I ))
> done