首页 > 解决方案 > 如何在删除部分路径的同时递归复制文件

问题描述

我在这样的结构中有数百个图像文件:

路径/到/文件/100/image1.jpg

路径/到/文件/9999/image765.jpg

路径/to/file/333/picture2.jpg

我想删除路径的第 4 部分(100,9999,333,...),以便得到以下信息:

路径/到/文件/image1.jpg

路径/到/文件/image765.jpg

路径/到/文件/picture2.jpg

在这种情况下,图像文件名没有重复,如果这使事情变得更容易,目标目录可以命名完全不同(例如目标可以是“另一个/路径/到/the/images/image1.jpg”

解决方案可能是查找/剪切/重命名命令的某种组合。

我怎样才能在 bash 中做到这一点?

标签: bash

解决方案


由于您只有“数百个”文件,因此您很可能不需要做任何特别的事情,只需编写:

mv path/to/file/*/*.jpg path/to/file/

但是根据文件的数量和名称的长度,这可能会超出内核允许您传递给单个命令的数量,在这种情况下,您可能需要编写一个for-loop 来代替:

for file in path/to/file/*/*.jpg ; do
    mv "$file" path/to/file/
done

(当然,这假设你mv在你的路径上。没有用于重命名文件的 Bash 内置,所以任何方法都取决于你的系统上还有什么可用的。如果你没有mv,你需要调整上面的因此。)


推荐阅读