将文件复制到新名称 - 最短的方法

将文件复制到新名称 - 最短的方法

在一个目录中,我有大约 150 个具有特定扩展名的文件,例如:

abc.ext
def.ext
ghi.ext
...

现在我想将所有这些文件也复制到新文件名(不带扩展名):

abc
def
ghi

完成这项工作的最短方法是什么?是否可以在 bash 文件中不编写循环?

编辑:谢谢您的回答(dirkt,约翰·纽曼)。
看到答案后,我会坚持使用较短的答案,尽管它有一个循环。

答案1

无需编写脚本(“bash 文件”)即可实现,但不使用循环则不行:

for f in *.ext ; do cp -- "$f" "$(basename "$f" .ext)" ; done

basename可用于删除后缀。

答案2

没有循环绝对是可能的。好不好……这个就交给你了。

$ find . -type f -name "*.ext" -print0 | xargs -0 -I {} echo cp -T {} {}SUB | sed -e 's/\.extSUB//g'

向 sh 附加一个管道以退出试运行模式。反引号没有用,因为它会去除换行符,除非您处理 $IFS。正如前面提到的,反引号还存在其他字符问题。还需要 cp -T,因为最后一个参数通常需要一个目录。

我没有足够的“代表”来评论上面的内容,但是您可以使用 bash 的各种技巧${}来避免basename.

子字符串:${f:0:-4} 或最长匹配:${f%%.ext}

相关内容