我正在尝试将大量文件 (.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 的数据和数千个对我们客户组织至关重要的文件。”,始终保留最新的备份……