我有一个 WordPress 网站的服务器备份,该网站的上传目录中有大约 1000 张图片。当通过 WordPress 上传图片时,它会创建多种尺寸的图片,例如:
foobar.jpg
foobar-170x170.jpg
foobar-250x250.jpg
我熟悉使用 来find
移动目录及其子文件夹中的所有文件,find . -mindepth 3 -type f -print -exec mv {jpe?g|png|gif} . \;
但我很好奇是否可以添加类似“不要移动这个”的排除。我想给出一个模式,然后排除包含该模式的文件名。类似于!(\d{2,5}x\d{2,5}\.(jpe?g|png|gif))
。
理想情况下,我希望用单个命令执行此操作,而不是循环运行它或rm
在移动所有文件后使用它来删除文件。任何减少多个终端命令的更好建议都很好。
答案1
您可以使用查找-not
或!
表达式:
-not expr
Same as ! expr, but not POSIX compliant.
! expr True if expr is false. This character will also usually need
protection from interpretation by the shell.
因此,如果要移动foobar.jpg
但不移动另外两个,您可以使用:
find . -mindepth 3 -type f -regex '.*.jpg\|.*.jpeg\|.*png\|.*gif' \
-not -regex '.*[0-9]+x[0-9]+.*' -exec mv {} . \;
你也可以让它匹配仅有的两边各有 2-5 位数字
find . -mindepth 3 -type f -regextype posix-egrep \
-regex '.*.jpg|.*.jpeg|.*png|.*gif' -not -regex '.*[^0-9][0-9]{2,5}x[0-9]{2,5}.*'