我有一些名称包含多个扩展名的文件:
$ 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/'