根据子文件夹移动和重命名文件
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】:您可以将rename
与sed
一起使用,例如替代约定
$ rename 's~([^_]+)_([^_]+)_.*/([^/.]+\..*)~$1_$2_$3~' barcode_subdir_01/a/b/c/file2.csv
将文件重命名为
barcode_subdir_file2.csv
我使用~
代替更常见的/
分隔符以使其更清晰。
您可以使用-n
选项测试脚本以显示重命名的文件而无需实际执行操作。
【讨论】:
以上是关于根据子文件夹移动和重命名文件的主要内容,如果未能解决你的问题,请参考以下文章