如何使用 csh 或 bash 在 Mac 上批量删除文件扩展名?

如何使用 csh 或 bash 在 Mac 上批量删除文件扩展名?

我错误地.dcm在 Mac 上的所有文件上添加了扩展名,导致无法登录 iCloud 并存储我的钥匙链。

我一直想找到一个解决方案来恢复其原始文件扩展名,但我只找到了.abc.def扩展名替换的答案,这不是我想要的。我想删除.dcm每个文件上添加的所有冗余扩展名。

有没有办法可以删除所有文件上的 .dcm 扩展名(递归)?

这些是我发现的替换文件扩展名的解决方案:

for file in *.abc; do mv "$file" "${file%.abc}"; done
for old in *.abc; do mv $old basename $old .abc.ef; done

它们要么不是递归的,要么 Bash(3.2x)说“错误替换”/“未找到命令”。

答案1

这应该可以做到:

find / -type f -name '*.dcm' -exec sh -c 'mv -- "$0" "${0%.dcm}"' {} \;

命令:

  • 递归自/
  • 查找每个名为*.dcm
  • 使用一个参数(文件名)执行一个小的子 shell 调用 ( {})
  • $0…使用以下方法重命名文件 ( )mv
  • 删除最短匹配 ( %)使用.dcm字符串操作

把一个放在echo前面mv看看它会产生什么作用。

如果你不想使用子 shell,你可以通过管道传输到while

find / -type f -name '*.dcm' -print0 | while IFS= read -r -d '' filename; do
  mv -- "$filename" "${filename%.dcm}"
done

相关内容