将 jpg 文件从嵌套/隐藏结构重新定位到相对已知目录

将 jpg 文件从嵌套/隐藏结构重新定位到相对已知目录

我正在尝试将大量文件 (.jpg) 从嵌套子目录批量移动/组织到相对目录。结构是预先规划好的。只是不能 100% 确定最有效和最安全的方法是什么。

样本结构:

/directory/subdir/jpg/
/directory/subdir/source/something.jpg
/directory/subdir/source/something.tif
/directory/subdir/source/something-else.jpg
/directory/subdir/source/something-else.tif
/directory/subdir/source/another-file.jpg
/directory/subdir/source/another-file.tif
/directory/another-subdir/jpg/
/directory/another-subdir/source/yet-another-file.jpg
/directory/another-subdir/source/yet-another-file.tif

目标是实现这一点...

/directory/subdir/jpg/something.jpg
/directory/subdir/jpg/something-else.jpg
/directory/subdir/jpg/another-file.jpg
/directory/subdir/source/something.tif
/directory/subdir/source/something-else.tif
/directory/subdir/source/another-file.tif
/directory/another-subdir/jpg/yet-another-file.jpg
/directory/another-subdir/source/yet-another-file.tif

我考虑过类似的事情。只是不确定这是否会破坏我的结构。我们谈论的是数十 GB 的数据和数千个对我们客户组织至关重要的文件。

find /directory -name \*.jpg -exec mv {} ../jpg/ \;

如果有人知道某种形式的“试运行”,我可以在实际执行之前使用它进行视觉测试,那就太棒了。谢谢!

更新:

实际上,我现在正尝试在 Mac 上本地执行相同操作,但出现了此错误。有什么巧妙的解决方法吗?

$ find -name "*.jpg" -execdir pwd \; -execdir echo mv -v '{}' ../jpg \;
find: illegal option -- n
usage: find [-H | -L | -P] [-EXdsx] [-f path] path ... [expression]
       find [-H | -L | -P] [-EXdsx] -f path [path ...] [expression]

答案1

您只需进行一次试运行即可echo

find /directory -name \*.jpg -exec echo mv {} ../jpg/ \;

但这不会实现您想要的效果,因为../jpg总是在当前目录中进行评估,因此会将所有 jpg 图像移动到$PWD/../jpg

这应该可以按预期工作:

find /directory -name "*.jpg" -execdir pwd \; -execdir echo mv -v '{}' ../jpg \;

因为-execdir

类似-exec,但指定的命令是从包含匹配文件的子目录运行的,而该子目录通常不是您启动 find 的目录。这是一种更安全的命令调用方法,因为它可以避免在解析匹配文件的路径时出现竞争条件。

但当然“我们谈论的是数十 GB 的数据和数千个对我们客户组织至关重要的文件。”,始终保留最新的备份……

相关内容