我有30k +图像和许多文件夹来保存这些图像。我想要的是每个文件夹有100个图像。有谁知道Linux程序/脚本可以帮助我吗?
最好我希望程序/脚本能够创建目录(即images-001,images-002,images-003等),然后放置100个图像(不同的扩展名.gif .jpg .png .bmp。 webm)在每个文件夹中。
答案 0 :(得分:0)
只需使用标准和更可控的命令来获得更好的组织文件:
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
答案 1 :(得分:0)
如果你在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 "$@" "$newdir" # or: qmv -t "$newdir" "$@"
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
主要是find
和xargs
的GNU扩展,但Mac OS X find
和xargs
也支持他们。 -r
的{{1}}选项也是GNU扩展名; Mac OS X xargs
不支持它,它没有相应的功能。它也被称为xargs
;这意味着如果没有列出文件名,则--no-run-if-empty
不会运行程序xargs
,这与标准movefiles.sh
不同,标准xargs
即使没有文件命令也至少运行一次命令。如果您没有-r
,则可以使用if [ $# != 0 ]; then …current script…; fi
修改脚本,以便在使用零参数调用时保护脚本。