如何将目录名称作为前缀添加到以特定模式开头的文件?

如何将目录名称作为前缀添加到以特定模式开头的文件?

我有 1000 个具有不同名称的目录,但所有这些目录中的文件都有以tran-20.ft, tran-30.ft, tran-40.ft, tran-50.ft,开头的文件tran-60.ft

目录结构

dir1 ---tran-20.ft
  :     tran-30.ft
  :     tran-40.ft
  :     tran-50.ft
  :     tran-60.ft
  :
dir1000

预期产出

dir1 --- dir1_tran-20.ft
         dir1_tran-30.ft
         dir1_tran-40.ft
         dir1_tran-50.ft
         dir1_tran-60.ft

我只想将目录名称添加为特定文件()的前缀tran*?我怎么做到这一点?

答案1

像这样与 参数扩展

for f in */tran-*.ft; do
    echo mv "$f" "${f%%/*}/${f%%/*}_${f##*/}"
done

echo当输出看起来足够好时删除


或者像这样珀尔的rename

rename -n 's!^([^/]+)/(tran-\d+\.ft)!$1/${1}_$2!' */tran-*.ft

-n当输出看起来足够好时移除开关

相关内容