我会感谢任何帮助,这里相对较新
我有以下目录结构
Main_dir
|-Barcode_subdirname_01\(many further subfolders)\filename.pdf
|-Barcode_subdirname_02\(many further subfolders)\filename.csv
我一直在尝试编写一个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
我无法让它发挥作用,可能会走向错误的方向。
答案 0 :(得分:1)
您可以rename
使用sed
替代约定,例如
$ rename 's~([^_]+)_([^_]+)_.*/([^/.]+\..*)~$1_$2_$3~' barcode_subdir_01/a/b/c/file2.csv
将文件重命名为
barcode_subdir_file2.csv
我使用~
代替更常见的/
分隔符,以使其更清晰。
您可以使用-n
选项测试脚本,以显示重命名的文件,而无需实际执行操作。