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

时间:2015-12-23 00:38:34

标签: bash unix directory rename move

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

我有以下目录结构

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 (仅基于第一个子目录名称和条形码)

我一直在尝试编写一个bash脚本来从main_dir执行此操作,但已达到我的编码能力限制(我可以使用其他任何方式工作)。

  • 首先识别第一级子文件夹

    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 个答案:

答案 0 :(得分:1)

您可以rename使用sed替代约定,例如

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

将文件重命名为

barcode_subdir_file2.csv

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

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