我有一个包含100.000个文件的目录,命名为:
1_jpeg.ext
1_png.ext
2_jpeg.ext
2_png.ext
...
101.235_jpeg.ext
101.236_jpeg.ext
我需要提取所有这些文件并将它们放在单独的文件夹中,如下所示:
jpeg_folder
---001000
---002000
---003000
---...
png_folder
---001000
---002000
---003000
---...
我想将这些文件拆分为每个文件夹,每个文件夹恰好包含1000张图像。
它们的排序方式很重要,例如在jpeg文件夹下创建的名为001000的文件夹将具有以下文件:
1_jpeg.ext
2_jpeg.ext
...
我在16.04 Ubuntu计算机上。
答案 0 :(得分:0)
我们可以使用sort
和split
进行分组。
由于Ubuntu具有GNU实用程序,我们可以使用特定于GNU的split
选项直接生成合适的名称。
#/bin/bash
# somewhere to store the intermediate information
mkdir tmp
# create list of files to move (dot prefix so "ls *" ignores it)
find -maxdepth 1 -mindepth 1 -type f | sort -n > tmp/.files
for ext in _jpeg.ext _png.ext; do
# top-level output directory names
type="$(basename "$ext" .ext)_folder"
# chunk each type of image into groups of (up to) 1000 files
grep "$ext\$" <tmp/.files |\
split --numeric-suffixes=1 -a3 -l1000 - tmp/
# use split's output filenames as basis for new directories
# then move each group of files. tidy up as we go
for grp in tmp/*; do
dir="$type/$(basename $grp)000"
mkdir -p "$dir"
cat "$grp" | xargs mv -t $dir/.
rm "$grp"
done
done
# clean up
rm tmp/.files
rmdir tmp
答案 1 :(得分:-4)
mkdir jpeg_folder && mkdir png_folder
mv *_jpeg.ext jpeg_folder && mv *_png.ext png_folder