根据子文件夹移动和重命名文件

Posted

技术标签:

【中文标题】根据子文件夹移动和重命名文件【英文标题】:Move and rename files based on subfolders 【发布时间】:2016-03-29 08:48:58 【问题描述】:

我会很感激任何帮助,这里相对较新

我有以下目录结构

Main_dir
|-Barcode_subdirname_01\(many further subfolders)\filename.pdf
|-Barcode_subdirname_02\(many further subfolders)\filename.csv
许多子文件夹中有 1000 多个文件 第一级子目录具有与其中所有文件关联的条形码。例如 123456_dirname 我想将所有子目录中的所有文件复制到 main_dir 和 重命名文件subdirname_barcode_filename.extension(仅基于第一个子目录名称和条形码)

我一直在尝试从 main_dir 编写一个 bash 脚本来执行此操作,但已经达到了我的编码能力的极限(我愿意接受任何其他可行的方式)。

首先识别一级子文件夹

find -maxdepth 1 -type d |

然后剪掉由下划线分隔的前 2 部分

cut -d\_ -f1 > barcode

然后在子文件夹中找到文件,重命名并移动

find -type f -print0 | while IFS= read -r filenames; do newname="$barcode/sudirname/filename\/" mv "filename" "main_dir"/"newname" done

我无法让它工作,并且可能会走错方向。

【问题讨论】:

【参考方案1】:

您可以将renamesed 一起使用,例如替代约定

$ rename 's~([^_]+)_([^_]+)_.*/([^/.]+\..*)~$1_$2_$3~' barcode_subdir_01/a/b/c/file2.csv

将文件重命名为

barcode_subdir_file2.csv

我使用~ 代替更常见的/ 分隔符以使其更清晰。

您可以使用-n 选项测试脚本以显示重命名的文件而无需实际执行操作。

【讨论】:

以上是关于根据子文件夹移动和重命名文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Linux 中批量移动复制追加和重命名文件

在github中移动和重命名文件

Linux命令----文件的移动和重命名

管道字符串与变量中的文件夹到 findstr - 复制和重命名文件

mv命令(移动和重命名)

使用文件夹名称复制和重命名文件的批处理文件