我在一个目录中有一堆 .txt 文件,我希望能够找到这些文件并从文件名中删除扩展名。
我可以使用以下方法找到文件:
$ find . -maxdepth 1 -type f -name "*.txt"
./0test.txt
./1test.txt
./2test.txt
./3test.txt
./4test.txt
./5test.txt
./6test.txt
./7test.txt
./8test.txt
./9test.txt
然后我尝试使用sed 命令删除“.txt”扩展名,例如:
find . -maxdepth 1 -type f -name "*.txt" | sed "s/\.txt$//"
但我只是列出了没有扩展名的文件名,而实际文件名保持不变。
那么您如何实际更改文件名本身呢?
$
在正则表达式中匹配字符串的结尾,您不能匹配之后的字符,只能匹配之前的字符。还
.
需要转义以阻止它具有特殊含义(任何字符)。所以:
如果您尝试重命名
rename
文件,则可以使用基于 perl 的命令使用相同的正则表达式替换find
(当所有文件都在一个目录级别时,你不需要),或者一个简单的shell循环mv
:在 bash 中这个怎么样
我知道这是一个老问题,也许有人会从中受益。昨晚我需要用 sed 做这个确切的事情,我求上帝告诉我,我一直在尝试这个:
echo filename.txt | sed 's/\.*$//
它只是没有用,它显示了包含扩展名的文件名。这是上帝启示的echo filename.txt | sed 's/\...*$//' filename
这不仅删除了 3 个字母扩展名,而且删除了多个扩展名,即。tar.bz2、tar.xz 甚至还有 tar.gz。
这也有预期的结果: