基于子文件夹移动和重命名文件

3

我很感激你的帮助,我是比较新的这里。

我拥有以下的目录结构。

Main_dir
|-Barcode_subdirname_01\(many further subfolders)\filename.pdf
|-Barcode_subdirname_02\(many further subfolders)\filename.csv
  • 有许多子文件夹中包含着数千个文件。
  • 第一层子目录的名称是所有文件共用的条形码。例如,123456_dirname。
  • 我想将所有子文件夹中的文件复制到主文件夹,并且根据第一个子目录名称和条形码重新命名这些文件为subdirname_barcode_filename.extension的格式。

我试图编写一个bash脚本在主文件夹中执行此操作,但是我的编程能力已经达到了极限(我接受任何其他可行的方法)。

  • 首先需要识别第一层子文件夹

    find -maxdepth 1 -type d |

  • 然后按照下划线分隔符切割出前两部分的内容

    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个回答

1
你可以像使用替换约定一样,使用sedrename结合使用,例如:
$ rename 's~([^_]+)_([^_]+)_.*/([^/.]+\..*)~$1_$2_$3~' barcode_subdir_01/a/b/c/file2.csv

将文件重命名为:
barcode_subdir_file2.csv

我使用~而不是更常见的/分隔符,以使其更清晰。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接