以文件夹名称递归重命名文件

时间:2017-09-08 10:24:30

标签: shell awk

我尝试使用

递归重命名文件夹中的文件
find . -iname "*bw" -exec rename /accepted_hits.bw .bw '{}' \;

我想用相应的文件夹名称

更改每个文件夹中的文件名

例如。 test1 / accepted_hits.bw到test1.bw

1 个答案:

答案 0 :(得分:2)

尝试此命令:

find . -iname "accepted_hits.bw" | while read file; do dir=$(basename $(dirname $file)); mv $file ${dir}.bw; done

其中:

  • find命令搜索名称为“accepted_hits.bw”的递归文件
  • -i选项表示不区分大小写
  • symbol |表示find命令的输出是while命令的输入
  • 每行
  • while read file循环,并在dodone之间执行命令

find命令将输出:

./a/accepted_hits.bw
./b/accepted_hits.bw

所以命令块将执行两次。第一行的dirname $file获取./adir=$(basename $(dirname $file))是目录的名称,在此示例中为a

mv命令在accepted_hits.bw目录中移动文件.,并将其重命名为${dir}.bw

使用man命令查看每个命令的手册页。