bash - 如何在删除部分路径的同时递归复制文件
问题描述
我在这样的结构中有数百个图像文件:
路径/到/文件/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 中做到这一点?
解决方案
由于您只有“数百个”文件,因此您很可能不需要做任何特别的事情,只需编写:
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
,你需要调整上面的因此。)
推荐阅读
- html - 为什么我的剪辑路径缩放动画模糊?
- ios - 如何在ios中正确设置滚动视图中的最后一项
- javascript - JS/JQuery 获取元素鼠标结束
- c# - 我可以在全局可用的静态类中创建 cookie 吗?
- linux - 无法打开文件“/media/$USER/pendrive/keyfile”没有这样的文件或目录
- powershell - 在powershell中合并两个CSV文件而不改变列的顺序
- php - 如何使用 laravel Rule 门面将请求字符串与表中最后插入的行进行比较
- tensorflow - 使用 MNIST 数据集训练的模型预测自己的图像
- amazon-web-services - flink readCSV 被“org.apache.flink.fs.s3base.shaded.com.amazonaws.SdkClientException:Timeout waiting for connection from pool”抛出
- graphql - 如何使用所需的两个参数之一在模式中定义 graphql 查询