我有30k +图像和许多保存这些图像的文件夹。我想要的是每个文件夹有100个图像。有谁知道可以帮助我的Linux程序/脚本?将文件组移动到子目录
最好我希望程序/脚本能够创建目录(即图像001,图像002,图像003等),然后放置100个图像(不同的扩展名.gif .jpg .png .bmp .webm)在每个文件夹中。
我有30k +图像和许多保存这些图像的文件夹。我想要的是每个文件夹有100个图像。有谁知道可以帮助我的Linux程序/脚本?将文件组移动到子目录
最好我希望程序/脚本能够创建目录(即图像001,图像002,图像003等),然后放置100个图像(不同的扩展名.gif .jpg .png .bmp .webm)在每个文件夹中。
只需使用标准和更可控的命令为更好地组织文件:
cd <your_image_folder_pathname>
mkdir img_jpg img_gif img_bmp img_tiff
mv *.jpg img_jpg
mv *.gif img_gif
mv *.bmp img_bmp
mv *.tiff img_tiff
移动剩余的文件,以img_misc
mkdir img_misc
find -type f | xargs -I {} mv {} img_misc
如果你是在Linux上,GNU mv
命令有一个方便的选择-t target-directory
这对xargs
有用,但在这里我们需要每100个文件创建一个不同的目标目录,所以我们不会使用-t
。
xargs
命令可以将文件名分组为100个组。残留问题是确定目标的目录名称。为此,一个shell脚本是适当的:
#!/bin/bash
mkdir -p images-000
dirnum=$(ls -d images-[0-9][0-9][0-9] | sed -n '$s/images-//p')
newdir="images-$(($dirnum + 1))"
mv "[email protected]" "$newdir" # or: qmv -t "$newdir" "[email protected]"
rm -fr images-000
的images-000
目录中创建初始化的东西,但绝不是对任何文件的目标。这次解析ls
是可以的,因为它列出的名称将不包含空格,换行符或其他尴尬的字符。 (一般情况下,大约解析的ls
输出极为谨慎。)
随着该脚本调用move-files.sh
,你现在可以运行类似:
find /source/place-1 /opt/photos/place-2 … -type f -print0 |
xargs -0 -n 100 -r -- movefiles.sh
注意-print0
和-0
主要是GNU扩展find
和xargs
,但Mac OS X find
和xargs
也支持它们。 选项xargs
也是一个GNU扩展;它不支持Mac OS X xargs
,它没有等效。它也被称为--no-run-if-empty
;这意味着如果没有列出文件名,则xargs
不运行程序movefiles.sh
,这与标准xargs
不同,即使没有文件名也需要运行该命令至少一次。如果您没有-r
,则可以使用if [ $# != 0 ]; then …current script…; fi
修改脚本,以便在用零参数调用该脚本时对其进行保护。
你打算如何将文件分区到文件夹?随机?按名字?按类型?通过目录输入顺序? – 2014-10-03 01:24:26
随机所有我真正想要的是每个文件夹100个文件,所以它更容易管理。 – ilovepoker 2014-10-03 01:27:01
每个文件夹100个随机文件听起来并不容易管理,因为你永远无法找到任何东西......没有某种外部索引机制。但如果这就是你真正想要'xargs'可能会有所帮助。 – 2014-10-03 01:42:02