linux - 如何识别目录中修改的文件名?
问题描述
我在一个目录中有以下四个文件:
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 循环已更改的文件数以及目录中保持不变的文件数?
解决方案
参数扩展(带有子字符串替换)不会返回任何值来让您知道它是成功还是失败。您将需要手动执行此操作。在修改之前保存文件名,然后检查文件是否存在。如果没有,则进行了更改,因此增加了一个计数器。
你可以做类似的事情:
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"
推荐阅读
- github - 终端中的 GitHub 音频问题,音频文件不允许推送
- python - Jupyterlab Notebooks 中安装和导入的区别
- facebook - Facebook 在打开对话时自动发送消息
- c - c- 当一个表达式有逗号操作符时,它是如何计算的?
- excel - 使用字典方法存储值
- java - Hibernate 升级后连接增加
- swift - 拖动到另一个字段时如何强制 NSTokenField *move* 标记?
- typescript - TypeScript 错误 - Redux 中间件属性 0
- nginx - yii2 basic 使用 nginx 重写 url
- java - ObjectBox 查询 ToOne 和 ToMany With Or 包含搜索词