首页 > 解决方案 > 如何识别目录中修改的文件名?

问题描述

我在一个目录中有以下四个文件:

TRAILBLAZER_107-10016_FTP_SCR_CT_CTAC
TRAILBLAZER_107-10016_FTP_SCR_CT_Recon
TRAILBLAZER_107-10016_FTP_SCR_PET_NAC
TRAILBLAZER_107-10016_FTP_SCR_PET_AC_Frames

我制作了一个简单的 for 循环来遍历每个文件并根据名称中的某个关键字更改文件的名称。这实际上只是更改了底部两个文件的名称:

for file in TRAILBLAZER*
   do
      mv "$file" "${file/PET_AC/PET_TESTAC}"
      mv "$file" "${file/PET_NAC/TESTNAC}"
   done

我如何能够回显该 for 循环已更改的文件数以及目录中保持不变的文件数?

标签: linuxbashfile-rename

解决方案


参数扩展(带有子字符串替换)不会返回任何值来让您知道它是成功还是失败。您将需要手动执行此操作。在修改之前保存文件名,然后检查文件是否存在。如果没有,则进行了更改,因此增加了一个计数器。

你可以做类似的事情:

changed=0                                      ## counter

for file in TRAILBLAZER*
do
    fname="$file"                              ## save original file name
    
    mv "$file" "${file/PET_AC/PET_TESTAC}"
    mv "$file" "${file/PET_NAC/TESTNAC}"
    
    [ -f "$fname" ] || ((changed++))           ## original exists or increment counter
done

printf "files changed: %s\n", "$changed"

推荐阅读