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

Yaq*_*ang 3 command-line file-extension batch-rename macos

我错误地.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
Run Code Online (Sandbox Code Playgroud)

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

slh*_*hck 5

这应该这样做:

find / -type f -name '*.dcm' -exec sh -c 'mv -- "$0" "${0%.dcm}"' {} \;
Run Code Online (Sandbox Code Playgroud)

命令:

  • 递归自 /
  • 查找每个命名的文件 *.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
Run Code Online (Sandbox Code Playgroud)