使用单行命令更改多个文件扩展名

使用单行命令更改多个文件扩展名

我有一些名称包含多个扩展名的文件:

$ ls -r
File1_345.R.12345
File1_3.234.R.6789
File1_2345.R.2345
File1_12345.R.12345
$

我想重命名它们以删除所有现有的扩展名并将其替换为.txt.输出应如下:

$ ls -r
File1_345.txt
File1_3.txt
File1_2345.txt
File1_12345.txt

是否可以使用 find 和 xargs 命令?

答案1

如果您想删除所有扩展名(之后的所有内容)第一的点)从每个文件名,做

$ for f in *
do
    mv -- "$f" "${f%%.*}.txt"
done

当然,如果你真的想在一行中完成此操作,只需将上面的内容折叠起来即可

$ for f in *; do mv -- "$f" "${f%%.*}.txt"; done

答案2

您可以使用 GNU Parallel 来做到这一点:

find ... | parallel mv {} '{=s/\..*//=}'.txt

答案3

对于此类任务,我强烈建议使用该rename工具(例如 Ubuntu 中的 Larry Wall):

rename --verbose 's/\..*$/.txt/' File*
# replaces everything after the first dot.

或者使用更具体的正则表达式:'s/\.R\.[0-9]+$/.txt/'

相关内容